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

时间:2016-07-04 04:08:47

标签: keystonejs

当我提交表格时。代码没有进入view.on处理程序。 是因为玉文件名与动作名不同吗?或者是因为我使用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

路由器/ 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);
};

路由器/视图/ 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

2 个答案:

答案 0 :(得分:1)

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

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

更改为:

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

或:

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

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

答案 1 :(得分:0)

我发现自从您发布此内容以来已经过了很长时间,但是如果您仍然在努力,我认为您在{{1} {{1}呼叫next()时错过了它功能。

view.on

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