POST请求正文返回空数组



当在POSTMAN中发布一些数据时,我遇到了一个问题;张贴";方法/auth/login-req.body返回空数组。只有当我使用带有use表单数据的POST方法,如果我更改为xxx-www-form-urlencoded,那么Postman才会返回空对象。我想知道为什么它如此有效

const express = require('express');
const mongoose = require('mongoose');
const app = express();
require('dotenv').config();
const port = process.env.PORT || 5000;

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use("/static", express.static(__dirname + "/assets"))

app.post('/auth/login', (req, res) => {
res.status(200).json(req.body)
})

mongoose.connect("mongodb://localhost:27017")
.then(() => {
app.listen(port, () => {
console.log('port' + port)
})
})

我假设你指的是application/x-www-form-urlencoded而不是xxx-www-form-urlencoded,你指的不是form-data而是multipart/form-data

这两种内容类型是完全不同的编码。当你打电话时:

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

您添加了一个可以解析application/x-www-form-urlencoded的中间件,但这并不意味着它也会自动解析其他格式。它只适用于该格式,就像express.json()只适用于application/json格式一样。

我解决了这个问题,我刚刚在控制器中创建了multer,它按照我想要的工作

const express = require('express');
const router = express.Router();
const { getUsers, createNewUser } = require('../controllers/newUser')
const path = require('path');
const multer = require('multer');

const upload = multer();

router.get('/', getUsers)
router.get('/:id', (req, res) => res.send('get single user'))
router.post('/', upload.none(), createNewUser)

module.exports = router;

最新更新