使用DataTables / AJAX和NodeJS / Multer上传FormData

时间:2019-10-13 08:34:44

标签: jquery node.js express datatables multer

经过数小时的研究,我遇到了以下问题。我已经看到了很多关于该主题的问题和答案,但是对我没有任何帮助:(

我正在构建一个具有拖放文件上传功能的Electron应用程序。我正在使用已实现express的{​​{1}}服务器来处理文件上传。当我使用multer时,文件上传工作正常:

客户端

fetch

服务器端

uploadFile = (file) => {
  formData.append('file', file);
}

var formData = new FormData();
([...files]).forEach(uploadFile);

fetch('/uploadLogs', {
     method: 'POST',
     body: formData
   }).then(...)

我正在使用var express = require('express'); var bodyParser = require('body-parser') var multer = require('multer'); var app = express(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); var memStorage = multer.memoryStorage(); var uploadToMemory = multer({ storage: memStorage }) app.post('/uploadLogs', uploadToMemory.any(), (req, res, next) => { const files = req.files; if (!files) { const error = new Error('Please choose files') error.httpStatusCode = 400 return next(error) } ... }) ,并尝试使用serverside rendering,它使用JQuery / AJAX从服务器而不是从客户端加载数据,因为我希望上传时从服务器返回数百万行文件(这就是我需要停止使用DataTables的原因)。当我如下更改客户端代码时:

fetch

我在响应中收到以下异常消息,响应代码为$('#table').DataTable( { serverSide: true, ajax: { url: url, method: 'POST', data: formData, cache: false, contentType: false, processData: false, success: function(data){ console.log(data); }, error: function(err) { console.error(err) } }, // data: logs, columns: tableHeaders });

500

我有两个问题:

1)如何解决此问题?我在一些地方(herehere)阅读了需要设置的内容:

Error: Please choose files
    at app.post (/Users/me/dev/logreader/server/app.js:41:21)
    at Layer.handle [as handle_request] (/Users/me/dev/logreader/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/me/dev/logreader/node_modules/express/lib/router/route.js:137:13)
    at multerMiddleware (/Users/me/dev/logreader/node_modules/multer/lib/make-middleware.js:18:41)
    at Layer.handle [as handle_request] (/Users/me/dev/logreader/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/me/dev/logreader/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/me/dev/logreader/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/me/dev/logreader/node_modules/express/lib/router/layer.js:95:5)
    at /Users/me/dev/logreader/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/me/dev/logreader/node_modules/express/lib/router/index.js:335:12)
AJAX配置中的

属性,以重置内容类型。

2)为什么即使我将错误显式设置为 contentType: false, processData: false, ,也出现500错误?

0 个答案:

没有答案