Node.js 在Express JS路由中,使用formData获取帖子为空
我有一个表单,它使用fetch()到AJAX,并在NodeJS上进行路由。当AJAX POST点击路由时,req.body显示一个空对象{} 代码如下: //在app.js中Node.js 在Express JS路由中,使用formData获取帖子为空,node.js,fetch,form-data,Node.js,Fetch,Form Data,我有一个表单,它使用fetch()到AJAX,并在NodeJS上进行路由。当AJAX POST点击路由时,req.body显示一个空对象{} 代码如下: //在app.js中 form.getElementById('form__option').addEventListener('submit', e => { e.preventDefault() const form = $('form')[0] fetch('/polls/create', {
form.getElementById('form__option').addEventListener('submit', e => {
e.preventDefault()
const form = $('form')[0]
fetch('/polls/create', {
method: 'POST',
body: new FormData(form)
})
})
use(bodyParser.json())
use(bodyParser.urlencoded({extended:true}))
//格式为.js
form.getElementById('form__option').addEventListener('submit', e => {
e.preventDefault()
const form = $('form')[0]
fetch('/polls/create', {
method: 'POST',
body: new FormData(form)
})
})
//在appRoute.js中
exports.createPost = (req, res, next) => {
console.log('req body', req.body)
res.send('NOT IMPLEMENTED: pollsController createPost');
}
这里的问题是
FormData
将内容类型设置为multipart/FormData
,这表示“主体解析器不理解”
请注意以下评论:
[body parser]不处理多部分实体,因为它们复杂且通常较大。对于多部分实体,您可能对以下模块感兴趣:总线男孩和连接总线男孩;多党和多党联手;可怕的;穆特
换句话说,您必须使用不同的模块来处理FormData发送的多部分正文。我可以推荐强大的
,在这种情况下,您的服务器代码如下所示:
const formidable = require('formidable')
exports.createPost = (req, res, next) => {
var form = new formidable.IncomingForm();
form.parse(req, (err, fields, files) => {
console.log(fields)
res.send('NOT IMPLEMENTED: pollsController createPost');
}
}
你是否将app.use(…)放在路由定义之前?是的,两个app.use都放在app.use(…,router)之前执行。使用(…,router)代码似乎差不多正确。你应该从浏览器中检查你的请求主体,确保它们是正确的(你可以使用ChromeDevTool的“网络”选项卡)。然后尝试添加一个应用程序。使用路由器(中间件)的最开始部分,检查req.body
是否正确