Node.js Express验证器主体不是函数
我正在尝试让express validator工作,但尽管我在跟踪,但无法让它工作。它给了我:“未捕获的例外:身体不是一个功能”。 我使用的是ExpressValidator版本:5.3.1Node.js Express验证器主体不是函数,node.js,express-validator,Node.js,Express Validator,我正在尝试让express validator工作,但尽管我在跟踪,但无法让它工作。它给了我:“未捕获的例外:身体不是一个功能”。 我使用的是ExpressValidator版本:5.3.1 console.log(主体)给出“未定义” 如果我适应了: var validator = require('express-validator'); router.post('/', [ console.log(validator) ], (req, res, next) => { //thin
console.log(主体)代码>给出“未定义”
如果我适应了:
var validator = require('express-validator');
router.post('/', [
console.log(validator)
],
(req, res, next) => {
//things
});
它作为输出给出:
[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]
}
}]
所以我可以看到我需要的东西在那里的某个地方,即isEmail()等等。但是,我必须告诉函数我想在电子邮件中检查它。既然说明了这一点,您就应该使用body('email').isEmail()来实现这一点代码>,我不知道如何做,因为他们的示例对我不起作用。
很抱歉,这一切都很简单。我在NodeJs方面还没有很多经验。根据,您可以将中间件重写为:
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(),
body('password', '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, res, next) => {
//validated body
console.log(req.body)
//things
});
使用早期版本:
app.js
您正在使用express validator v6.14.6?最新版本是v6.6.1。对不起,真的。我键入了npm-v express validator,但显然它打印了npm版本。我有5.3.1,它在语法方面稍微好一点,是的。但这并不能解决我的问题。body一开始没有定义。不管我做了什么,它都不会起作用。是的,这是因为你的版本。在升级到6.6.0版后(在package.json中进行调整并运行npm install,它编译得很好),我只是将我的归档文件检查到一个适用于您的版本的旧代码。
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(),
body('password', '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, res, next) => {
//validated body
console.log(req.body)
//things
});
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('*', (req, res) => {
res.status(404).json({ errors: [{location: req.path, msg: 'Not found', param: null}]});
});
fileValidation = (req, res, 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;