Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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
Javascript 无法读取未定义的属性-Ajax POST_Javascript_Jquery_Ajax_Mongodb_Express - Fatal编程技术网

Javascript 无法读取未定义的属性-Ajax POST

Javascript 无法读取未定义的属性-Ajax POST,javascript,jquery,ajax,mongodb,express,Javascript,Jquery,Ajax,Mongodb,Express,我正在尝试从ajax上传数据(上传音乐文件),当我点击“上传”按钮时,它会将数据保存到我的mongodb中。然而,我不断发现fieldname是未定义的。我认为在我的代码中的某个地方,它没有拾取数据 $('#upload').on('click', function(){ var formData = new FormData($('#file')[0].files[0]); $.ajax({ url: 'http://

我正在尝试从ajax上传数据(上传音乐文件),当我点击“上传”按钮时,它会将数据保存到我的mongodb中。然而,我不断发现fieldname是未定义的。我认为在我的代码中的某个地方,它没有拾取数据

$('#upload').on('click', function(){ 
          var formData = new FormData($('#file')[0].files[0]);

            $.ajax({
              url: 'http://localhost:3000/api/',
              method: 'POST',
              // data: {
              //    file: $('#file')[0].files[0]
              //  },
              data: formData,
              contentType: false,
              processData: false,
              mimeType: "multipart/form-data",
              success: function(data){  //if successful upon grabbing data
                console.log(data);
                console.log('Created music')
                var id = $('<p>').text("Id:" + data[i]._id);
                var title = $('<p>').text("Title:" + data[i].originalname);
                var play = $('<button>').data('Data-id', data[i]._id).text('Play').on('click', playSong); //creates edit button with donut id and carries a function editDonut in which we will define later

                var del = $('<button>').data('Data-id', data[i]._id).text('Delete').on('click', deleteMusic);  
                var container = $('<div>').attr('Data-id', data[i]._id);
                $(container).append(id, title, play, del); 
                $('body').append(container) 
                // $('#new-form').hide();  
              }
          })
        })
在Express-app.js中

app.use('/api', apiRouter);
终端中的错误

TypeError: Cannot read property 'fieldname' of undefined
    at /Users/will/pulse-express2-passport/config/apiRouter.js:72:24
    at Layer.handle [as handle_request] (/Users/will/pulse-express2-passport/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/will/pulse-express2-passport/node_modules/express/lib/router/route.js:131:13)
    at Array.<anonymous> (/Users/will/pulse-express2-passport/node_modules/multer/lib/make-middleware.js:52:37)
    at listener (/Users/will/pulse-express2-passport/node_modules/on-finished/index.js:169:15)
    at onFinish (/Users/will/pulse-express2-passport/node_modules/on-finished/index.js:100:5)
    at callback (/Users/will/pulse-express2-passport/node_modules/ee-first/index.js:55:10)
    at IncomingMessage.onevent (/Users/will/pulse-express2-passport/node_modules/ee-first/index.js:93:5)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:934:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
TypeError:无法读取未定义的属性“fieldname”
at/Users/will/pulse-express2-passport/config/apiRouter.js:72:24
在Layer.handle[作为handle_请求](/Users/will/pulse-express2-passport/node_modules/express/lib/router/Layer.js:95:5)
下一步(/Users/will/pulse-express2-passport/node_modules/express/lib/router/route.js:131:13)
在阵列上。(/Users/will/pulse-express2-passport/node_modules/multer/lib/make middleware.js:52:37)
在侦听器上(/Users/will/pulse-express2-passport/node_modules/on finished/index.js:169:15)
在onFinish(/Users/will/pulse-express2-passport/node_modules/on finished/index.js:100:5)
回调时(/Users/will/pulse-express2-passport/node_modules/ee first/index.js:55:10)
在IncomingMessage.onevent(/Users/will/pulse-express2-passport/node_modules/ee first/index.js:93:5)
在emitNone(events.js:86:13)
在IncomingMessage.emit(events.js:185:7)
在endReadableNT(_stream_readable.js:934:12)
at _combinedTickCallback(内部/流程/下一步_tick.js:74:11)
在进程中。_tick回调(内部/process/next_tick.js:98:9)

构造函数需要一个表单,从中提取键(元素名称)和值。将表单而不是文件传递给构造函数

var formData = new FormData($('#new-form')[0]);
或者,您可以创建一个空的FormData对象,然后向其中添加值

var formData = new FormData();
formData.append('uploads', $('#file')[0].files[0]);

您是否尝试监视来自浏览器工具的请求?您是否看到ajax请求确实在提交数据?确实如此。谢谢
var formData = new FormData($('#new-form')[0]);
var formData = new FormData();
formData.append('uploads', $('#file')[0].files[0]);