node ajax validator,node/express 4:在ajax post上使用express-validator显示错误

我是新来的节点,当用户尝试提交表单时,尝试显示验证错误(使用express-validator和express 4)。node/express 4:在ajax post上使用express-validator显示错误

验证程序似乎工作,因为如果我将数据记录到控制台,一切都如预期。但是,当我渲染视图时,无法在页面上显示错误(不显示任何内容)。与我一直在进行快速验证的“标准”教程唯一的区别是,我使用AJAX发布数据。

我的代码如下。我使用来表明我删除了更多的代码,并且为了简洁起见我删除了一些表单域。

app.js

var express = require('express')

, indexController = require('./routes/index')

, membersController = require('./routes/members')

[...]

, cookieParser = require('cookie-parser')

, bodyParser = require('body-parser')

, expressValidator = require('express-validator');

var app = express();

[...]

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: false }));

app.use(expressValidator()) // tried both placing it here or below

app.use(cookieParser());

app.use(express.static(path.join(__dirname, 'public')));

// I realize this may be not optimal

app.use(function(req,res,next){

req.db = db;

next();

});

app.use('/', indexController);

app.use('/members', membersController);

[...]

module.exports = app;

handle_members.js

$(document).ready(function() {

$('#join_btn').click(function(event, req, res){

event.preventDefault();

var newMember = {

'name': $('#join_form input#join_name').val(),

'email': $('#join_form input#join_email').val()

}

$.ajax({

type: 'POST',

data: newMember,

url: '/members/addmember',

dataType: 'JSON'

}).done(function(response){

if (response.msg === 'success'){

alert('New member added successfully!')

}

// maybe this is not necessary?

else if (response.msg === 'validation'){

alert('validation failed');

}

else{

alert('Error: ' + response.msg)

}

});

});

});

members.js

var express = require('express');

var router = express.Router();

router.post('/addmember',validator, function(req, res) {

var db = req.db;

var collection = db.get('memberstest');

collection.insert(req.body, function(err, result){

res.send(

(err === null) ? { msg: 'success' } : { msg: err }

);

});

});

function validator(req, res, next) {

req.checkBody('email', 'not valid email').isEmail();

req.checkBody('name', 'cannot be empty').notEmpty();

var errors = req.validationErrors();

if (errors) {

console.log(errors) // these are as expected

res.render('index',{errors:errors}); // no errors displayed

}

else {

next();

}

};

module.exports = router;

index.jade

[...]

form#join_form(method='POST', action='', role='form')

div.form-group

input#join_name.form-control(type='text', name='join_name')

input#join_email.form-control(type='email', name='email')

button#join_btn.btn(type='button') join

if errors

ul

for error in errors

li = error.msg

[...]

的错误变量记录到控制台时,看起来是这样的:

[ { param: 'email', msg: 'not valid email', value: 'xxxx' }, { param: 'name', msg: 'can't be empty', value: '' } ]

在过去的几天我确实尝试了很多不同的东西,但没有一次成功。这个问题似乎总是一样的:所有的都很好,但是当我渲染视图时就像它从不输入“if errors ...”语句。也许我在这里错过了一些非常基本的东西?任何帮助非常感谢,谢谢。

PS。最终,表单理想情况下应该在模式/弹出窗口内,以防改变某些内容。

2017-07-31

Tommy

+0

你能呈现怎样的错误变量的样子: var data = {}; // data here $.ajax({ type: 'POST', data: data, url: '/addmember', dataType: 'JSON' }).done(function() { alert('done'); }).fail(function() { alert('fail'); });

使用res.json后端答案呢? –

2017-07-31 01:44:43

+0

@MarceloAlves确定我更新了这个问题。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值