我已经在 Edge、Chrome 和 Opera 上尝试过,我的上传工作正常,问题只发生在 Firefox 上:
从前端,我发送一个 multipart/form-data 请求,如下所示:
$.ajax({
url: `/api/myUpdate/${$scope._id}`,
method: 'PUT',
data:formData,
contentType:false,
processData:false,
cache:false,
success: response =>{
..
},
error: err =>{
..
}
})
然后在我的 nodeJs 服务器上:
路线:
var multiparty = require('connect-multiparty');
var multipartyMiddleware = multiparty({maxFieldsSize:'200mb'});
app.route('/api/myUpdate/:_id')
.post(users.requiresLogin, multipartyMiddleware, hasAuthorization, myUpdateFn);
调试时,我通过了我的 requireslogin 中间件,但它卡在了 multipartyMiddleware 中,它永远不会达到“hasAuthorization”或“myUpdateFn”。
当请求超时时,我在服务器上收到此输出错误
Error: Request aborted
at IncomingMessage.onReqAborted (C:\dev\eedweb\node_modules\multiparty\index.js:190:17)
at IncomingMessage.emit (events.js:182:13)
at abortIncoming (_http_server.js:449:9)
at socketOnClose (_http_server.js:442:3)
at Socket.emit (events.js:187:15)
at TCP._handle.close (net.js:610:12)
从我所做的调试来看,它似乎卡在了一个名为“async_hooks”的文件中......但我真的不明白它到底做了什么。
我尝试了不同的上传大小,但似乎并不影响结果。
前端没有错误消息,Firefox 检查器只显示网络选项卡中的标题,但 formdata 对象在浏览器中似乎是相同的,当我检查节点服务器中的对象时似乎是消息正文、参数、文件等。firefox 似乎没有在网络检查器中显示它。
难道我做错了什么?