问题描述
我正在尝试使express-validator工作,但是尽管我遵循the example,但我无法使其工作。它给了我:“ uncaughtException:主体不是函数”。 我正在使用Express-Validator版本:5.3.1
Fit intercept: True
r_sq: 0.9473
m: 0.0017
b: -0.0192
Fit intercept: False
r_sq: 0.9112
m: 0.0014
b: 0.0000
给出“未定义”。
console.log(body);
如果我调整为:
var express = require('express');
var router = express.Router();
var {body,validationResult } = require('express-validator');
router.post('/',[
console.log(body),body('name','name is required').isLength({min: 2}).not().isEmpty().escape(),body('email','email must be a valid email format').not().isEmpty().isEmail().normalizeEmail(),body('subject','subject is required').not().isEmpty().escape(),body('content','content is required').not().isEmpty().trim().escape()
],(req,res,next) => {
if(recaptcha check succeeds)
{
var errors = validationResult(req);
if(errors) {
console.log(errors);
callback(errors);
}
else {
console.log('No errors');
callback(undefined);
}
}
});
它给出作为输出:
var validator = require('express-validator');
router.post('/',[
console.log(validator)
],next) => {
//things
});
所以我可以看到我需要的是isEmail()之类的东西。但是,我必须以某种方式告诉我要在电子邮件中检查的功能。由于documentation清楚地表明您应该使用[Function: expressValidator] {
validator: {
version: '10.11.0',toDate: [Function: toDate] { default: [Circular] },toFloat: [Function: toFloat] { default: [Circular] },toInt: [Function: toInt] { default: [Circular] },toBoolean: [Function: toBoolean] { default: [Circular] },equals: [Function: equals] { default: [Circular] },contains: [Function: contains] { default: [Circular] },matches: [Function: matches] { default: [Circular] },isEmail: [Function: isEmail] { default: [Circular] },isURL: [Function: isURL] { default: [Circular] },isMACAddress: [Function: isMACAddress] { default: [Circular] },isIP: [Function: isIP] { default: [Circular] },...
...
},utils: {
toString: [Function],formatParamOutput: [Function: formatParamOutput],mapAndExtend: [Function: mapAndExtend],makeSanitizer: [Function: makeSanitizer],replaceArgs: [Function: replaceArgs]
}
}]
进行此操作,因此我不确定如何执行此操作,因为他们的示例对我而言不起作用。
很抱歉,如果这样简单。我对NodeJ的经验还不够。
解决方法
根据express-validator documentation 6.6.0,您可以将中间件重写为:
const express = require('express');
const router = express.Router();
const { body,validationResult } = require('express-validator');
validationBodyRules = [
body('login','login is required').exists(),body('password','password is required').exists(),body('login','login is required').notEmpty(),'password is required').notEmpty()
];
checkRules = (req,res,next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
next();
};
router.post('/',validationBodyRules,checkRules,(req,next) => {
//validated body
console.log(req.body)
//things
});
使用早期版本:
app.js
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const expressValidator = require('express-validator');
const app = express();
cors({
credentials: true,origin: true
});
app.use(cors());
app.use(bodyParser.json());
app.use(expressValidator()); //<--right after body-parser middleware
app.use(require('./server/index'));
app.get('*',res) => {
res.status(404).json({ errors: [{location: req.path,msg: 'Not found',param: null}]});
});
服务器/index.js
fileValidation = (req,next) => {
req.checkBody('height','height é obrigatório').isInt({ min: 0 });
req.checkBody('width','width é obrigatório').isInt({ min: 0 });
req.checkBody('sequence','sequence é obrigatório').isInt({ min: 0 });
req.getValidationResult().then((result) => {
if (!result.isEmpty()) {
return res.status(400).json({ errors: result.array() });
}
return next();
});
};
addFile = (req,res) => {
let sql = 'INSERT INTO media_file(height,width,"exibitionTime",sequence,media,mimetype,img) VALUES ($1,$2,$3,$4,$5,$6,$7) returning *';
try {
const result = await postgres.client.query(sql,[req.body.height,req.body.width,req.body.exibitionTime,req.body.sequence,req.body.media,req.file.mimetype,req.file.buffer]);
res.status(201).json(result.rows[0]);
res.end();
} catch (err) {
return res.status(500).json({ errors: [{ param: undefined,msg: err.detail,value: undefined }] });
}
};
router.post('/files/',fileValidation,addFile);
module.exports = router;