【问题标题】:Key passed but validation fails in postman密钥通过但邮递员验证失败
【发布时间】:2021-04-15 10:42:00
【问题描述】:

我有这个补丁请求,我根据文档的对象更新某些信息。当我使用 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);
};

我在这里遗漏了什么吗?我想我知道,请指出来。

【问题讨论】:

    标签: express postman joi


    【解决方案1】:

    除了在服务器端使用 var bodyParser = require('body-parser'); 之外,它仍然会返回空的 req.body ,这将导致错误,因为您已经进行了验证。当您在 Postman 中使用 form-data 发送 PATCH 请求时,它返回空 req.body 的原因是因为 body-parser 无法处理 multipart/form-data。您需要一个可以像 multer 一样处理多部分/表单数据的包。 首先要安装 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 header请求,而我们将使用multer来解析multipart/form-data。

    【讨论】:

    • 首先,我在入口文件中使用了bodyparser。其次,这听起来很愚蠢,但我完全失去了这一点,就像我完全忘记了multer一样。我在其他路线上使用它。感谢您指出,您节省了我 1 小时的挫败感。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2021-12-25
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 2021-01-04
    相关资源
    最近更新 更多