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;
});
我正在使用 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;
});