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")
或者该方法将失败。
我不知道教程的细节,但我想应该有另一个请求处理程序,将这些参数保存到数据库中。