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

g57*_*792 12 javascript node.js express

我正在使用Node.js,我遇到与客户端通信的问题.

我定义了Express:

var express             = require("express");
var app                 = express();`
Run Code Online (Sandbox Code Playgroud)

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

app.get("/", function(req, res){
    res.render("index", { name: "example" });
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

vic*_*ohl 19

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

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

<h1>{{ name }}</h1>
Run Code Online (Sandbox Code Playgroud)

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

<script>
  var name = "{{ name }}";
  console.log(name);
</script>
Run Code Online (Sandbox Code Playgroud)

  • 当我在console.log(名称)时得到{{name}} (5认同)

Jea*_* S. 9

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

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

index.html的:

$.get( "/getvar", function( data ) {
  name = data.name;
});
Run Code Online (Sandbox Code Playgroud)

server.js:

app.get("/getvar", function(req, res){
    res.json({ name: "example" });
});
Run Code Online (Sandbox Code Playgroud)