关于 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
可以获取这个值?
标题:关于 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
对象的所有属性就可以正确显示了。