Ярлык для добавления значений req в ответ для рендеринга в Express View

Я использую 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}, но значения так и не были добавлены в представление.


person rob_hicks    schedule 23.03.2012    source источник


Ответы (1)


Я не совсем уверен, что вам нужно, но если вы хотите отобразить представление ejs с данными, которые были в теле запроса, вы должны сделать что-то вроде этого:

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

вид.ejs:

<ul>
<% for(var key in body) { %>
  <li><%= key %>: <%= body[key] %></li>
<% } %>
</ul>
person Linus Thiel    schedule 23.03.2012
comment
Спасибо. Я добавил дополнительную информацию. - person rob_hicks; 23.03.2012
comment
Это не совсем то, что я искал, но дало мне хорошее представление о том, как делать то, что я хочу. Я просто ищу способ добавить данные, уже прикрепленные к телу запроса, к ответу, а затем извлечь их из ответа. Я думаю, что ‹%= body[key] %› должно помочь. - person rob_hicks; 03.04.2012