问题描述
我有这个补丁请求,我根据文档的对象更新某些信息。当我使用 Postman(form-data) 发送请求时,我收到验证错误,提示“_id”是必需的。
这是 Postman 中的样子,
路线看起来像这样,
router.patch("/update",async (req,res) => {
try{
await updateValidation(req.body);
// whatever stuff processed with the data
} catch (err) {
res.status(400).send({ message: err.details[0].message });
}
}
验证函数如下所示,
const updateValidation = (data) => {
const schema = Joi.object({
_id: Joi.string().required(),// other whatever validation possible
});
return schema.validateAsync(data);
};
我在这里遗漏了什么吗?我想我知道,请指出。
解决方法
除了在服务器端使用 var bodyParser = require('body-parser');
之外,它仍然会返回空的 req.body,这将导致错误,因为您已经进行了验证。当您在 Postman 中使用 form-data 发送 PATCH 请求时,它返回空 req.body 的原因是 body-parser 无法处理 multipart/form-data。你需要一个可以像multer一样处理multipart/form-data的包。
首先安装 body-parser 和 multer,转到您的终端并使用 -
npm install --save body-parser multer
因此将此代码添加到 server.js
var express = require('express');
var bodyParser = require('body-parser');
var multer = require('multer');
var upload = multer();
var app = express();
下次使用这个中间件:
// for parsing application/json
app.use(bodyParser.json());
// for parsing application/xwww-
app.use(bodyParser.urlencoded({ extended: true }));
//form-urlencoded
// for parsing multipart/form-data
app.use(upload.array());
app.use(express.static('public'));
导入 body parser 和 multer 后,我们将使用 body-parser 解析 json 和 x-www-form-urlencoded 头请求,而我们将使用 multer 解析 multipart/form-data。