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 请求..
当我提交表单时。代码没有进入 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 请求..