如何在node.js和HTML之间传递参数?

时间:2017-08-08 05:46:03

标签: javascript html node.js

我是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_nvf的值从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的值?任何基于我的脚本的解决方案脚本都将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

要在您的后端和客户端之间发送数据,您必须使用jetty/dropwizardAJAXsocket.io。 如果您只需要在客户需要时更新后端,则应使用WebSockets。如果您的客户端必须由后端(服务器)通知,您应该使用AJAXsocket.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 = 20b = 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);
});