关于 Nodejs 中 res.render() 的一个问题

关于 Nodejs 中 res.render() 的一个问题

exports.index = function(req, res){
var user = {
first_name: ‘Lord’,
surname: ‘Lucan’,
address: ‘secret’,
};
res.render(‘index’, { title: ‘Express’, users: user });
};

index.jade 文件中,我可以通过 #{title} 来访问 title 变量,但是,为什么我不能通过 users.address 来获取 address 的值呢,而通过 user.address 可以获取这个值?


4 回复

标题:关于 Nodejs 中 res.render() 的一个问题

内容:

在 Node.js 应用程序中使用 res.render() 方法来渲染视图时,你可能会遇到一些关于如何正确传递和访问变量的疑问。让我们通过一个具体的例子来探讨这个问题。

假设我们有一个简单的 Express 应用程序,并且我们希望在一个名为 index.jade 的模板文件中显示用户信息。以下是一个控制器函数的例子,该函数将用户数据传递给视图:

// 定义一个路由处理函数
exports.index = function(req, res) {
    // 创建一个用户对象
    var user = {
        first_name: 'Lord',
        surname: 'Lucan',
        address: 'secret',
    };

    // 渲染视图并传递用户数据
    res.render('index', { title: 'Express', user: user });
};

在这个例子中,我们创建了一个名为 user 的对象,并将其作为第二个参数传递给 res.render() 函数。注意这里我们传递的是 user 而不是 users

接下来,在 index.jade 模板文件中,你可以通过以下方式访问这些变量:

doctype html
html
  head
    title= title
  body
    h1 User Information
    p First Name: #{user.first_name}
    p Surname: #{user.surname}
    p Address: #{user.address}

问题解答: 你不能通过 users.address 来获取 address 的值是因为你在传递数据到视图时,使用的键名是 user 而不是 users。因此,在模板中你应该使用 user.address 来访问用户的地址信息。

正确的做法是在控制器中将用户对象直接命名为 user,然后在模板中通过 user.address 访问其属性。这样可以确保你的视图能够正确地解析并显示用户的数据。

总结:

  • 确保在 res.render() 中传递的数据键名与模板中访问的键名一致。
  • 如果传递的对象是一个单独的用户对象,那么在模板中也应该使用相应的键名来访问它的属性。

jade中必须是users啊,你确定你没有在其它地方使用:

var user = users

?

确实是有重名的变量了,但是不是user = users,而是和app.js里面 var user = require(’./routes/user’)重名了,不晓得为什么还能通过user访问。

在你的代码中,res.render() 方法将一个名为 users 的对象传递给视图模板。这意味着在模板中,你需要使用 users 对象来访问其属性。

具体来说,你在 index.jade 文件中的代码应该是:

p First Name: #{users.first_name}
p Surname: #{users.surname}
p Address: #{users.address}

而不是 #{users.address}。因为在传递给 res.render() 的时候,你将用户对象赋值给了变量名 users,所以在模板中需要通过 users 来访问它的属性。

如果你尝试直接使用 #{address}#{users.address},模板引擎会找不到这个变量或属性,因此会导致错误。

示例代码

Controller (Node.js):

exports.index = function(req, res) {
  var user = {
    first_name: 'Lord',
    surname: 'Lucan',
    address: 'secret',
  };
  res.render('index', { title: 'Express', users: user });
};

View (Jade):

h1 #{title}
p First Name: #{users.first_name}
p Surname: #{users.surname}
p Address: #{users.address}

这样,在模板中通过 users 访问 user 对象的所有属性就可以正确显示了。

回到顶部