Express用户没有定义

嗨,我一直在通过这个教程,并遇到了一个问题。

在我的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) 

这对我来说没有意义。 它确实在页面中使用了正确的值,但我无法提交表单。 想法?

通过使用:

 app.param('name', function (req, res, next, name){ //... }); 

您正在将参数name映射到从DB检索的用户。 您目前正在从您的url中提取此参数:

 app.get('/users/:name/edit', function (req, res){ // ... }); 

:name标记告诉Express它应该调用上面的代码并检索将保存在请求地址中的用户。

但是,您的模板中的表单向/users/发出请求,并且不指定用户。 所以,要么为您的表单生成正确的URL:

 form(method="POST", action="/users/#{user.name}/xxx") 

或者该方法将失败。

我不知道教程的细节,但我想应该有另一个请求处理程序,将这些参数保存到数据库中。