view.on('post',...) 在 keystonejs 中提交表单时没有命中

view.on('post',...) is not hitting while submitting form in keystonejs

当我提交表单时。代码没有进入 view.on 处理程序。 是因为 jade 文件名与动作名不同吗?还是因为我用了app.all。为什么路由器被击中但 view.on 没有击中?

mycart.jade

if user
        a(class='button',href='/purchase') Purchase
    else
        form.signup-form(method="post" action="signup").row.col-sm-8.col-md-6
            input(type='hidden', name='action',  value='signup')

            .form-group
                label Name
                    .row
                        .col-sm-6.col-md-6
                            input.form-control.input-box(type='text', name='first', placeholder='First Name')
                        .col-sm-6.col-md-6
                            input.form-control.input-box(type='text', name='last', placeholder='Last Name')

            .form-group
                label Email             
                input.form-control.input-box(type='email', name='email', placeholder='Email')
            .form-group
                label Password
                .row
                .col-sm-6.col-md-6
                input.form-control.input-box(type='password', name='password', placeholder='Password')

            button(type='submit').btn.btn-success Purchase

routers/index.js

exports = module.exports = function(app) {

    // Views
    app.get('/', routes.views.index);
    app.get('/mycart', routes.views.mycart);
    app.all('/signup', routes.views.signup);
};

routers/views/signup.js

var keystone = require('keystone');
exports = module.exports = function(req, res) {

    var view = new keystone.View(req, res);

    console.log("this log appears : "+JSON.stringify(req.body));

    view.on('post', { action: 'signup' }, function(next) {
        console.log('this long is not appearing');
    });

};

控制台

GET /mycart 200 341.217 ms
this log appears :{"action":"signup","first":"sonal","last":"parekh","email":"sonal21@gmail.com","password":"sankar"}
POST /signup - - ms

我知道你发布这篇文章已经很久了,但如果你还在苦苦挣扎,我想你只是错过了在你的 view.on 函数中调用 next() 的机会。

view.on('post', { action: 'signup' }, function(next) {
    console.log('this will now appear');
    next()
});

我已经使用了您的代码,这是让它对我有用的唯一要求。

我遇到了同样的结果问题,但出于不同的原因(因此搜索将我带到了这里)。对我来说,这个问题是通过改变 routes/index.js 中的一行来解决的:

app.get('/signup', routes.views.signup);

更改为:

app.all('/signup', routes.views.signup);

或:

app.post('/signup', routes.views.signup);

显然 "get" 只处理 HTTP GET 请求,"all" 允许处理任何 HTTP 请求类型,更具体地说 "post" 处理 HTTP POST 请求..