Express用户未定义

时间:2013-04-20 15:11:31

标签: node.js express

您好我一直在完成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)

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

1 个答案:

答案 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")

或者方法会失败。

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