我使用的是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
我错过了什么或做错了什么?
答案 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')