密钥通过但邮递员验证失败

问题描述

我有这个补丁请求,我根据文档的对象更新某些信息。当我使用 Postman(form-data) 发送请求时,我收到验证错误提示“_id”是必需的。

这是 Postman 中的样子,

enter image description here

路线看起来像这样,

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。