Node.js 通过快速渲染将参数传递给客户端

Node.js passing parameters to client via express render

我正在使用 Node.js,但在与客户沟通时遇到问题。

我定义快递:

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

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

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

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

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

我是漏了什么还是做错了什么?

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

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

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

你基本上是在告诉 express 呈现你的索引页面并为 name 变量提供一个值,但这并不一定使 name var 在你的客户端可用 javascript.您需要编辑索引模板以在页面中显示 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" });
});

你发送给render函数的变量name只有在页面渲染时可用,发送给客户端后就不可访问了。您必须在渲染阶段的视图中使用它。

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

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

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

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

从节点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')

res.render() 呈现模板并发送给客户端。例如,使用 res.render() 时的响应 Content-Type header 将是 text/html。但是 res.json() 以 json 格式向客户端发送数据,因此响应的 Content-Type header 将是 application/json. 尝试使用 res.json().

res.json({ name: "example" });
$.get( "/", function( data ) {
  name = data.name;
});