mongodb Postman原始数据工作,但节点中的POST请求上的表单数据不工作

tsm1rwdh  于 2023-05-28  发布在  Go
关注(0)|答案(6)|浏览(457)

我在使用 Postman 时遇到了一些问题。当我尝试以JSON(application/json)格式发送原始数据时,它成功了。
Postman sending post request and succeded
但是当我尝试发送表单数据时,它返回一些错误。

{
    "error": {
        "errors": {
            "name": {
                "message": "Path `name` is required.",
                "name": "ValidatorError",
                "properties": {
                    "message": "Path `{PATH}` is required.",
                    "type": "required",
                    "path": "name"
                },
                "kind": "required",
                "path": "name",
                "$isValidatorError": true
            },
            "price": {
                "message": "Path `price` is required.",
                "name": "ValidatorError",
                "properties": {
                    "message": "Path `{PATH}` is required.",
                    "type": "required",
                    "path": "price"
                },
                "kind": "required",
                "path": "price",
                "$isValidatorError": true
            }
        },
        "_message": "Product validation failed",
        "message": "Product validation failed: name: Path `name` is required., price: Path `price` is required.",
        "name": "ValidationError"
    }
}

Postman errors
下面是我的项目代码片段

product.js

import express from 'express';
import mongoose from 'mongoose';
import Product from '../models/product.model';

router.post('/', (req, res, next) => {
    const product = new Product({
        _id: new mongoose.Types.ObjectId(),
        name: req.body.name,
        price: req.body.price
    });
    product.save().then(result => {
        console.log(result);
        res.status(201).json({
            message: 'Created product successfully',
            createdProduct: {
                name: result.name,
                price: result.price,
                _id: result._id,
                request: {
                    type: 'GET',
                    url: `http://localhost:3000/products/${result._id}`
                }
            }
        });
    }).catch(err => {
        console.log(err);
        res.status(500).json({
            error: err
        });
    });
});

product.model.js

import mongoose from 'mongoose';

const productSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: {type: String, required: true},
    price: {type: Number, required: true}
});

module.exports = mongoose.model('Product', productSchema);
ymdaylpp

ymdaylpp1#

你失踪了

app.use(bodyParser.urlencoded({ extended: true }));

然后尝试x-www-form-urlencoded

dm7nw8vv

dm7nw8vv2#

使用multer中间件:

const upload = require('multer')();

route.post('/', upload.any(), (req, res) => {
    // your code...
});
r9f1avp5

r9f1avp53#

  • 使用postman's formdata发送的任何数据都被视为multipart/formdata。你必须使用multer或其他类似的库来解析表单数据。
  • 对于来自postman的x-www-form-urlencodedraw数据,不需要使用multer进行解析。您可以使用body-parser或express内置中间件express.json()express.urlencoded({ extended: false, })解析这些数据
  • 由于multer返回一个中间件,所以你只能在multer内部访问req.body(即fileFilter),或者在multer之后的中间件中访问req.body,但如果你没有使用multer作为全局中间件(这是个坏主意),就不能在multer之前访问req.body

对于代码段:https://stackoverflow.com/a/68588435/10146901

kiz8lqtg

kiz8lqtg4#

你需要使用body-parser。

npm install body-parser --save

然后只要加上你的代码

var bodyParser = require('body-parser')

app.use(bodyParser.json())

详细信息可在https://www.npmjs.com/package/body-parser中找到

c9x0cxw0

c9x0cxw05#

除了使用body-parser之外,它仍然会返回空的req.body,这将导致错误,因为您已经进行了验证。使用form-data tru Postman发送POST请求时返回空req.body的原因是因为body-parser不能处理multipart/form-data。你需要一个像multer一样可以处理multipart/form-data的包。参见https://www.npmjs.com/package/multer。尝试使用该软件包。

gorkyyrv

gorkyyrv6#

  • 使用Multer获取表单数据
  • 在upload函数中,您可以从表单数据中获取请求体

https://www.npmjs.com/package/multer

相关问题