Node.js 使用节点验证器一次验证多个属性

Node.js 使用节点验证器一次验证多个属性,node.js,express,Node.js,Express,我正在构建Node.js代理,目的是处理单个POST请求,并将负载重定向到两个单独的端点 假设我的JSON负载是: { "owner":"0ce856fa-f17f-11e2-9062-9b7910849bf4", "comment":"My super cool comment!", "photo":"0928536a-53c4-11e3-ba86-4b026f27c637" } 在发送之前,我需要在代理端点上验证此有效负载;这三个属性中的每一个都必须存在,owner和photo

我正在构建Node.js代理,目的是处理单个
POST
请求,并将负载重定向到两个单独的端点

假设我的JSON负载是:

{
  "owner":"0ce856fa-f17f-11e2-9062-9b7910849bf4",
  "comment":"My super cool comment!",
  "photo":"0928536a-53c4-11e3-ba86-4b026f27c637"
}
在发送之前,我需要在代理端点上验证此有效负载;这三个属性中的每一个都必须存在,
owner
photo
必须与下面的正则表达式匹配。如果他们没有通过验证,我需要处理这些错误,并返回一条带有适当错误代码的消息给用户

为了实现这一点,我已经使用等设置了一个basic Node.js实例:

var url = require('url');
var request = require('request');
var express = require('express');
var check = require('validator').check,
    sanitize = require('validator').sanitize;

var app = express();

app.use(express.json());
app.use(express.urlencoded());

app.all('*', function(req, res){
    if (req.method == "POST")
    {
        try {
            check(req.body.owner, {
                is: "<owner> property of type [uuid] is required"
            }).is(/\w{8}(?:-\w{4}){3}-\w{12}?/);
        } catch (e) {
            console.log(e);
            res.json({"result":"failed","message":"Your payload didn't pass validation"});
        }
    }
});

app.listen(9000, function() {
    console.log("Server initialized on port 9000");
});
var url=require('url');
var请求=要求(“请求”);
var express=需要(“express”);
var check=require('validator')。检查,
清理=要求(“验证程序”)。清理;
var-app=express();
使用(express.json());
app.use(express.urlencoded());
应用程序所有('*',函数(req,res){
如果(请求方法==“POST”)
{
试一试{
检查(要求主体、所有者、{
is:“需要[uuid]类型的属性”
}).is(/\w{8}(?:-\w{4}){3}-\w{12}?/);
}捕获(e){
控制台日志(e);
res.json({“result”:“failed”,“message”:“您的负载未通过验证”});
}
}
});
app.listen(9000,函数(){
log(“服务器在端口9000上初始化”);
});
问题:这一切都很好,非常适合一次验证(在本例中为
owner
),但是
catch
上的
e
不包含任何有关验证失败的属性的详细信息——如果我设置了多个检查,我将不知道哪一个失败或为什么失败


如何设置一系列检查并检索我配置的自定义消息?它谈到在验证器自述文件中使用
req.onValidationError
,但这看起来是前端验证,我不清楚如何(如果可能)将其与服务器端代码集成。

更新,使用快速验证器:

根据@shawnzhu的建议,我改为实现了
expressvalidator
;在使用express+connect 3.0时需要进行一些调整,但考虑到它处理
节点验证程序
错误,这似乎是最好的方法(尽管验证
标题

这将执行此任务,并根据条件验证每个属性。

try提供以下错误处理:

var errors = req.validationErrors();

嘿,看起来是一个几乎相同的实现。六个一个/半打另一个?关键是它可以检查多个数据而无需尝试..捕获,因此您只能通过一组错误数据来控制数据流。啊,明白了。好的,我来试一试。
try {
    check(req.body.owner, "<owner> property of type [uuid] is required").is(/\w{8}(?:-\w{4}){3}-\w{12}?/);
    check(req.body.photo, "<photo> property of type [uuid] is required").is(/\w{8}(?:-\w{4}){3}-\w{12}?/);
    check(req.body.comment, "<comment> property can't be empty").notNull().notEmpty();
} catch (e) {
    res.json({"result":"failed","message":e.message});
}
var errors = req.validationErrors();