将req值添加到响应以在Express View中呈现的快捷方式

时间:2012-03-23 02:46:05

标签: node.js express ejs

我正在使用Node / Express(最新的生产版本)

我有一个表单,我可以收集新的帐户信息。用户可以添加用户名等。

在视图处理程序中,我检查mongodb数据库以查看用户名是否唯一。如果不是,我生成一条消息并重新加载原始视图。由于原始请求是帖子,因此用户发布的所有数据都在req.body中。我想添加用户在响应中提交的数据。我可以通过专门将每个值添加到响应中来实现。但是,是否有更简单的方法将所有请求数据添加回响应?有没有办法在视图中呈现(我使用的是ejs)我尝试了res.send(JSON)和ejs变量。这样做会产生错误,说明变量不可用。


这是我的函数(忽略users.createUser(req) - 它还没有完成):

createAccount: function(req, res, next){
    users.createUser(req);
    res.render('create_account', {
        layout: 'secure_layout',
        title: 'Create Account',
        givenName: req.body.givenName,
        username: req.body.username,
        familyName: req.body.familyName
    });
},

这是我的观点:

<form action="/createAccount" method="post">
    <div>
        <label>First Name:</label>
        <input type="text" name="givenName" value="<%= givenName %>"/><br/>
    </div>
    <div>
        <label>Last Name:</label>
        <input type="text" name="familyName" value="<%= familyName %>"/><br/>
    </div>
    <div>
        <label>Username:</label>
        <input type="text" name="username" value="<%= username %>"/><br/>
    </div>
    <div>
        <label>Password:</label>
        <input type="password" name="password"/>
    </div>
    <div>
        <input type="submit" value="Submit"/>
    </div>
</form>

必须添加每个值似乎过于复杂。我试过{body:req.body}但是值从未添加到视图中。

1 个答案:

答案 0 :(得分:1)

我不太确定你追求的是什么,但如果你想用请求体上的数据渲染ejs视图,你可以按照这些方式做点什么:

app.post('/foo', function(req, res, next) {
  res.render('view', {body: req.body});
});

view.ejs:

<ul>
<% for(var key in body) { %>
  <li><%= key %>: <%= body[key] %></li>
<% } %>
</ul>