Node.js通过express render将参数传递给客户端

时间:2015-03-29 10:30:09

标签: javascript node.js express

我使用的是Node.js,而且我在与客户沟通方面遇到问题。

我定义了Express:

var express             = require("express");
var app                 = express();`

当我尝试在请求页面时将参数传递给客户端时,变量不包含任何数据,例如:

app.get("/", function(req, res){
    res.render("index", { name: "example" });
});

在索引页面上,当我使用控制台打印变量(name)时,它返回""

更多信息:http://expressjs.com/api.html#app.render

我错过了什么或做错了什么?

4 个答案:

答案 0 :(得分:14)

您发送到渲染功能的变量name仅在呈现页面时可用,在发送到客户端后,它不可访问。您必须在渲染阶段的视图中使用它。

由于您使用的是把手,您可以像这样在页面中显示它,例如:

<h1>{{ name }}</h1>

如果您想在javascript中使用此数据,请在script标记中使用它:

<script>
  var name = "{{ name }}";
  console.log(name);
</script>

答案 1 :(得分:8)

你基本上是在告诉express要呈现你的索引页面并为name变量提供一个值,但这并不一定会使你的客户端javascript中的name var变得可用。您需要编辑索引模板以在页面中显示name变量。 语法因您使用的模板引擎(jade,ejs,dustjs)而异。

另一个解决方案是在客户端页面的javascript中使用ajax调用,并在服务器上使用res.json来发送数据。然后,您可以在控制台中评估name。使用jquery:

的index.html:

$.get( "/getvar", function( data ) {
  name = data.name;
});

server.js:

app.get("/getvar", function(req, res){
    res.json({ name: "example" });
});

答案 2 :(得分:1)

如果你想通过javascript在客户端获取参数,你应该做这样的模板<script>var data = data</script>,否则变量不可用

如果您使用Jade,它将是这样的:

script(type='text/javascript').
    var name = !{name}

答案 3 :(得分:0)

将数据列表从节点js传递到html

server.js

var http = require('http');
var express = require('express');
var sqlite3 = require('sqlite3').verbose();
var bodyParser = require('body-parser');
var path    = require("path");

console.log('Server running at http://127.0.0.1:8081/');

var __dirname = "D:/html-files";
var app = express();
var urlencodedParser = bodyParser.urlencoded({ extended: false })

var engine = require('consolidate');

app.engine('html', engine.mustache);
app.use(express.static('./'));

app.get('/', function(req, res) {

    res.render('index.html');   

});

app.post('/', function (req, res) {
   console.log("Got a POST request for the homepage");
   res.send('Hello POST');
});

app.post('/get-user-list', urlencodedParser, function (req, res) {

    let db = new sqlite3.Database('user.db', sqlite3.OPEN_READWRITE, (err) => {
        if (err) {
            console.error(err.message);
        }
        console.log('Connected to the user database.');
        console.log("ID" + "\t" + "NAME" + "\t" + "EMAIL");
    });

    db.serialize(() => {     

        var dataList = "";

        db.each('SELECT id, name, email FROM USER ', (err, row) => {
            if (err) {
                console.error(err.message);
            }
            if(dataList != "")
            dataList = dataList + ',';

            dataList = dataList + '{"id":"' + row.ID + '","name":"' + row.NAME + '","email":"' + row.EMAIL + '"}';
            console.log("dataList : " + dataList);
        });

        db.close((err) => {
            if (err) {
                console.error(err.message);
            }
            console.log('Close the database connection.');
            response = {'username':dataList};                           
            aFunction(res, dataList);

        });

    });

});

var aFunction = function(res, dataList) {
    console.log('return to page.');
    console.log("dataList : " + dataList);
    res.render(__dirname + "/list-all-users.html", response);
};

app.listen(8081, '127.0.0.1')