如何使用ejs对POST和PUT请求使用相同的表单?

时间:2015-03-24 16:33:27

标签: node.js express

我要做的是以下内容:

routes

router.route('/new')
    .get(function (req, res) {
        var method = ''
        res.render('users/new.ejs', { method: method });
    });

router.route('/edit/:user_id')
    .get(function (req, res) {
        var method = '<input type="hidden" name="_method" value="put" />'
        var user = User.findById(req.params.user_id, function (err, user) {
                if(!err) {
                    return user;
                }
            });
        res.render('users/edit.ejs', {
            method: method
        });
    });

_form.ejs

<form accept-charset="UTF-8" action="/api/v1/users" method="post">
    <%- method %>
    <div class="field">
        <label for="firstName">First Name</label><br>
        <input id="firstName" name="firstName" type="text" />
    </div>
    <div class="field">
        <label for="age">Age</label><br>
        <input id="age" name="age" type="number" />
    </div>
    <div class="field">
        <label for="annualIncome">Annual Income</label><br>
        <input id="annualIncome" name="annualIncome" type="number" />
    </div>
    <div class="field">
        <label for="email">Email</label><br>
        <input id="email" name="email" type="text" />
    </div>
    <div class="field">
        <label for="riskTolerance">Risk Tolerance</label><br>
        <input id="riskTolerance" name="riskTolerance" type="number" />
    </div>
    <div class="actions">
        <input type="submit" value="Submit">
    </div>
</form>

所以,我想在Rails中这样做,你可以使用相同的表单来创建和编辑模型。所以,我想说当表单用于编辑时它是一个PUT请求。

这是适当的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以在ejs模板

中使用条件语句,而不是在路由代码中嵌入html。

routes

res.render('users/edit.ejs', {
    put: true
});

_form.ejs

<form accept-charset="UTF-8" action="/api/v1/users" method="post">

    <%if (put) { %>
        <input type="hidden" name="_method" value="put" />
    <% } %>

    <div class="field">
        <label for="firstName">First Name</label><br>
        <input id="firstName" name="firstName" type="text" />
    </div>

    ...

</form>