我是node.js和mongodb的新用户,还在学习。如果问题看起来很简单,请原谅。我的node.js MongoDB查询脚本(hello.js
)是 -
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://localhost:27017/flood';
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
console.log("Connected correctly to server.");
var collec_name="99"
var field_name ="data1"
var value=311
db.collection(collec_name).find({data0:value}, {[field_name]:1, _id:0}).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
使用command- node hello.js
可以正常运行查询并获得预期值result
(例如,result
的输出值为0.000115)。请注意,var collec_name="99"
,var field_name ="data1"
和var value=311
包含固定值。
我的HTML文件(index.html
)是 -
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var c_n = "99";
var f = "data1";
var v = 311;
document.getElementById("demo").innerHTML = 0.000115;
</script>
</body>
</html>
现在,我想通过替换{{1}的三个语句,将变量c_n
,v
和f
的值从index.html
传递到hello.js
as -
hello.js
然后,我想通过将var collec_name=c_n
var field_name = f
var value = v
的一个语句替换为
result
的值从hello.js
传递到index.html
index.html
那么,我怎样才能实现这些参数传递,这样如果我运行document.getElementById("demo").innerHTML = result;
页面,我可以在网上显示index.html
的值?任何基于我的脚本的解决方案脚本都将受到高度赞赏。
答案 0 :(得分:0)
要在您的后端和客户端之间发送数据,您必须使用jetty/dropwizard
,AJAX
或socket.io
。
如果您只需要在客户需要时更新后端,则应使用WebSockets
。如果您的客户端必须由后端(服务器)通知,您应该使用AJAX
或socket.io
。
因为您使用的是NodeJ,我建议您使用WebSockets
。
看看它: https://socket.io/
这是代码的示例:
首先安装包:
socket.io
HTML:
npm install -S socket.io
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
// add socket io
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
// connect to port
app.listen(3030);
var url = 'mongodb://localhost:27017/flood';
// setup server
io.on('connection', function (socket) {
// add event
socket.on('data', function (data) {
// execute after event was emitted
MongoClient.connect(url, function (err, db) {
assert.equal(null, err);
console.log("Connected correctly to server.");
var collec_name = data.collec;
var field_name = data.field;
var value = data.value
db.collection(collec_name).find({ data0: value }, { [field_name]: 1, _id: 0 }).toArray(function (err, result) {
if (err) throw err;
// TODO add emmit
console.log(result);
db.close();
});
});
});
});
答案 1 :(得分:0)
最后,我能够解决问题。由于我没有在网上找到任何完美的解决方案,我认为如果我在这里发布类似问题的一般解决方案,对其他用户(面临类似问题)会有帮助。如果这不是发布解决方案的正确位置,请原谅。
我的解决方案:这不是我上面示例的确切解决方案,但我认为最好为类似问题提供一般解决方案,以便任何人都可以根据以下内容修改/更新此解决方案他/她的榜样/需要作为基本方法将始终相同。首先,你需要有http,express和body-parser,你可以按照命令执行:
npm install http
npm install express
npm install body-parser --save
一般性问题:假设我在客户端HTML页面中有两个数字(例如a = 20
和b = 24
,我想总结服务器中的数字并在客户端获取求和结果(sum = 44
)以显示在HTML页面中。然后使用以下nodejs和ejs脚本 -
<强> index.ejs:强>
<html>
<head>
<title>Example solution</title>
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$(function(){
$('#loadRequest').click(function(e) {
e.preventDefault();
console.log('Load_button clicked');
var data = {};
data.a = 20; //input
data.b = 24; //input
$.ajax({
type: 'POST',
data: JSON.stringify(data), //input data to be sent to the server
contentType: 'application/json',
url: 'http://localhost:80/endpoint',
success: function(res) {
console.log('success');
console.log(res);
$("#demo").html(res); //summation displayed in the HTML page
}
});
});
});
</script>
</head>
<body>
<p id ="demo"></p>
<button id="loadRequest">Load</button>
</body>
</html>
<强> server.js 强>:
var http = require('http');
var express = require('express');
var app = express();
app.set('view engine', 'ejs'); //tell Express we're using EJS
app.set('views', __dirname + '/views'); //set path to *.ejs files
app.use('/public', express.static(__dirname + '/public'));
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.get('/', function(req, res) {
//render index.ejs file
res.render('index');
});
app.post('/endpoint', function(req, res){
var x = req.body.a; //received input 1 from client side
var y = req.body.b; //received input 2 from client side
console.log(x);
console.log(y);
var sum =x+y;
console.log(sum);
res.send(String(sum)); //sending summation to the client
});
http.createServer(app).listen(80);
完美无缺。如果您有任何意见/反馈,请与我们联系。
答案 2 :(得分:-1)
您可以使用AJAX,WebSockets或socket.io自行实现API - 或者您可以继续查看Express框架。
使用Express设置Node.js服务器不仅可以访问丰富的API接口,还可以使您的任务更加轻松。
使用它,您可以设置如下的简单路线:
app.post('/compute', function(req, res){
// compute 'result'
res.send(result);
});