Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在Express JS路由中,使用formData获取帖子为空_Node.js_Fetch_Form Data - Fatal编程技术网

Node.js 在Express JS路由中,使用formData获取帖子为空

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', {

我有一个表单,它使用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', {
        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
是否正确