使用邮递员时我遇到了一些问题。当我尝试以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"
}
}
这是我的项目代码片段
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);
答案 0 :(得分:1)
除了使用body-parser之外,它还将返回空的req.body,这将导致错误,因为您已经进行了验证。当使用form-data tru Postman发送POST请求时,它返回空的req.body的原因是因为body分析器无法处理multipart / form-data。您需要一个可以处理多部分/表单数据(例如multer)的软件包。参见https://www.npmjs.com/package/multer。尝试使用该软件包。
答案 1 :(得分:0)
您需要使用body-parser。
npm install body-parser --save
然后只需添加您的代码
var bodyParser = require('body-parser')
app.use(bodyParser.json())
答案 2 :(得分:0)
你失踪了
app.use(bodyParser.urlencoded({ extended: true }));
然后尝试x-www-form-urlencoded
答案 3 :(得分:0)
使用multer获取表单数据
内部上传功能,您可以从表单数据中获取请求正文
答案 4 :(得分:0)
postman's formdata
发送的任何数据都被视为 multipart/formdata
。您必须使用 multer 或其他类似的库来解析表单数据。x-www-form-urlencoded
和 raw
来自 postman 的数据不需要 multer 进行解析。您可以使用 body-parser
或表达内置中间件 express.json()
和 express.urlencoded({ extended: false, })
req.body
(即 fileFilter)或在 multer 之后的中间件中访问,但如果您没有将 multer 用作全局中间件(这是个坏主意) .