[英]Check POST body request syntax and format with Node.js Express
[英]Node/Express: How to check POST request body syntax and response error?
该项目是一个 Node/Express API 服务器,由swagger-node-codegen生成。 它的 POST API 需要一个验证器来检查请求正文的语法。
以下是该问题的两个示例:
服务器将接收请求正文并仍将正常处理,即向查询函数发送值。
检查 POST 请求正文的语法并响应错误的适当方法是什么?
我使用中间件来检查 POST 正文值: https : //expressjs.com/en/guide/using-middleware.html
router.post('/create', validateEmpty, (req, res) => {
res.status(200).send({result: "OK"})
})
const validateEmpty = (req, res, next) => {
let value = req.body.value;
if(value.length === 0) {
return res.status(500).send({
error: "empty value"
});
}
// if string value is longer than 0, continue with next function in route
next();
}
这是用于验证请求正文语法和值的非常好的模块。 这是一个例子。
您可以创建一个辅助模块requestValidator.js
来验证所有路由请求。 考虑注册 API。
const Joi = require('joi');
module.exports = {
// auth
validateSignUp: (input) => {
const schema = Joi.object().keys({
firstName: Joi.string().required(),
lastName: Joi.string().required(),
email: Joi.string().email({ minDomainAtoms: 2 }).required(),
password: Joi.string().min(6).max(20).required(),
confirmPassword: Joi.string().valid(Joi.ref('password')).required().options({
language: {
any: {
allowOnly: 'must match password'
}
}
}),
gender: Joi.string().required(),
address: addressSchema.required(),
});
return Joi.validate(input, schema);
},
}
在你的authController.js
const { validateSignUp } = require('../helpers/requestValidation');
module.exports = {
signUp: async (req, res, next) => {
const body = req.body;
// validation
const { error } = validateSignUp(body);
if(error) return res.status(400).json({
success: false,
message: error
});
const user = await User.findOne({ email: email.toLowerCase() });
if(user) {
return respondFailure(res, 'the email address you have entered is already registered');
}
const newUser = new User(body);
await newUser.save();
return res.status(400).json({
success: true,
message: 'user registered successfully',
data: newUser
});
},
}
您可以在requestValidator.js
添加整个应用程序的请求验证并在您的控制器中使用它。
上述解决方案有效,但它们存在一个用于验证 body、query 或 params 的快速库。
您可以按照以下步骤操作。
1)。 首先通过此命令安装库。
npm install --save express-validator
2)。 现在你的路由被定义了,导入这个
const { body, query, param } = require("express-validator");
3)。 现在在您的路线中,您可以使用上述任何一个对象示例..
router.post('/upload',
[
query('id')
.not()
.isEmpty()
.withMessage('id field can not be empty')
.matches(/^[0-9]+$/)
.withMessage('id must be integer only'),
body('fullName')
.trim()
.not()
.isEmpty()
.withMessage('fullName can not be empty')
.matches(/^[A-Za-z]+$/)
.withMessage('fullName must be Alpha only')
],
userController.fetchProperty
);
他们在包中定义了许多方法,因为我在上面的例子中使用了其中的一些,如 isEmpty()、matches()、isInt() 等。
4)。 现在在定义逻辑的控制器中,您首先需要导入它
const { validationResult } = require("express-validator");
5)。 现在在你的逻辑中,你只需要通过传递 req, res 对象来调用这个函数
const checkInputError = (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.status(422).json({
message: 'failure',
status: 422,
errors: errors.array()
});
}
};
现在,您将收到整个验证错误,作为应用于正文、查询或参数的响应。
希望这会帮助你或其他人!
更多查询可以参考这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.