使用 Express-Validator 验证 POST 参数

Posted

技术标签:

【中文标题】使用 Express-Validator 验证 POST 参数【英文标题】:Validating POST Params with Express-Validator 【发布时间】:2014-08-05 00:14:24 【问题描述】:

我正在尝试使用express-validator 在我的 Node/Express API 中构建参数验证。但是,当我使用以下 curl 命令curl -X POST -d "foo=bar" http://localhost:3000/collections/test 发出缺少字段(在本例中为名称)的 POST 请求时,请求仍然成功通过,跳过了验证。以下是我当前的代码 - 关于为什么绕过验证的任何想法?

var util = require('util');
var express = require('express');
var mongoskin = require('mongoskin');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');

var app = express();
app.use(bodyParser());
app.use(expressValidator());

var db = mongoskin.db('mongodb://@localhost:27017/test', safe:true)

app.param('collectionName', function(req, res, next, collectionName)
  req.collection = db.collection(collectionName)
  return next()
);

app.post('/collections/:collectionName', function(req, res, next) 
  req.checkBody('name', 'name is required').notEmpty();

  req.collection.insert(req.body, , function(e, results)
    if (e) return next(e)
    res.send(results)
  );
);

app.listen(3000);

【问题讨论】:

【参考方案1】:

您需要在处理请求之前添加对任何验证错误的检查。因此,对于您的 post API,您需要将其更新为如下所示:

app.post('/collections/:collectionName', function(req, res, next) 
  req.checkBody('name', 'name is required').notEmpty();

  // check for errors!
  var errors = req.validationErrors();
  if (errors) 
    res.send('There have been validation errors: ' + util.inspect(errors), 400);
    return;
  

  req.collection.insert(req.body, , function(e, results)
    if (e) return next(e)
    res.send(results)
  );
);

更多信息请查看使用示例:https://github.com/ctavan/express-validator#usage

【讨论】:

这成功了——没有意识到req.checkBody之后需要错误逻辑。谢谢!

以上是关于使用 Express-Validator 验证 POST 参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用express-validator在单独的文件中实现验证

javascript 使用express-validator的公共验证节点。

如何使用 express-validator 对嵌套对象进行验证

javascript 如何使用express-validator验证表达式是否为空?

使用 express-validator 作为 websockets 的中间件

express-validator在Express 4中未正确初始化