您好我一直在完成this教程并遇到了问题。
在我的edit.jade文件中,我有这个 -
form(method="POST", action="/users/")
input(type="hidden", name="_method", value="PUT")
p Name:
input#name(type="text", name="name", value="#{user.name}")
p Email:
input#email(type="email", name="email", value="#{user.email}")
p Age:
input#age(type="number", name="age", value="#{user.age}")
p: button(type="submit") Update
我用这段代码调用视图 -
app.param('name', function (req, res, next, name){
Users.find({ name: name }, function (err, docs) {
req.user = docs[0];
next();
});
});
app.get('/users/:name/edit', function (req, res){
res.render("users/edit", { user: req.user });
});
但是,在渲染edit.jade文件时,会抛出此错误 -
ReferenceError: edit.jade:6
4| input(type="hidden", name="_method", value="PUT")
5| p Name:
> 6| input#name(type="text", name="name", value="#{user.name}")
7| p Email:
8| input#email(type="email", name="email", value="#{user.email}")
9| p Age:
user is not defined
at eval (eval at <anonymous> (/usr/local/lib/node_modules/jade/lib/jade.js:171:8),<anonymous>:32:99)
at /usr/local/lib/node_modules/jade/lib/jade.js:172:35
at /usr/local/lib/node_modules/jade/bin/jade:154:17
at /usr/local/lib/node_modules/jade/node_modules/mkdirp/index.js:38:26
at Object.oncomplete (fs.js:107:15)
这对我没有意义。它确实在字段中使用正确的值呈现页面,但我无法提交表单。想法?
答案 0 :(得分:1)
使用:
app.param('name', function (req, res, next, name){
//...
});
您正在将参数name
映射到从DB检索到的用户。您目前正在从您的网址中提取此参数:
app.get('/users/:name/edit', function (req, res){
// ...
});
:name
令牌告诉Express它应该调用上面的代码并检索将保存在请求地址中的用户。
然而,模板中的表单向/users/
发出请求,并且未指定任何用户。
因此,要么为表单生成正确的URL:
form(method="POST", action="/users/#{user.name}/xxx")
或者方法会失败。
我不知道教程的细节,但我想应该有另一个请求处理程序将这些参数保存到数据库中。