当在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;