Node.js 使用节点版本14.15.1时,Express Multer不工作

Node.js 使用节点版本14.15.1时,Express Multer不工作,node.js,express,multer,Node.js,Express,Multer,我有以下代码片段: var fileUpload = multer({ storage: multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads/') }, filename: function (req, file, cb) { cb(null, Date.now() + file.originalname) } }) }); r

我有以下代码片段:

var fileUpload = multer({
  storage: multer.diskStorage({
    destination: function (req, file, cb) {
     cb(null, './uploads/')
    },
    filename: function (req, file, cb) {
     cb(null, Date.now() + file.originalname)
    }
 })
});

router.post("/addFile", fileUpload.single('newFile'), function (req, res) {
  let _id = req.body.someId;
  console.log("Adding File with id: " + _id);
  // some database inserts and response
  ...
此代码在节点v12中100%正常工作。我可以上传任何大小的文件,但是一旦我切换到节点v14.15.1,对于任何大于60KB的文件,上传行为都会异常。查看文件系统,我可以看到上传工作,但是路由中没有执行任何内容。因此,我可以在文件系统上看到该文件,但不会执行
console.log
和任何数据库命令

查看请求时,我似乎从未为节点14上大于60KB的文件返回响应头。我假设没有收到请求的响应头是上传失败的原因

下面是执行文件上载的javascript

var formData = new FormData();
formData.append('newFile', $("#newFile")[0].files[0]);
formData.append('someId', $('#someId').val());

$.ajax({
   url: './addFile',
   data: formData,
   contentType: false,
   processData: false,
   type: 'POST',
   success: function (data) {
     console.log('success upload')
}); 

我找到了问题的原因,但不知道如何解决。如果我设置了
res.local
,则上传失败。如果我把它评论出来,上传就可以了。是否有人知道此问题的修复/解决方法:

app.use(function (req, res, next) {
  req.connection = mysqlConnection;
  res.locals = {
    version: '1'
  };
  next();
});

app.use('/', indexRouter);

我将
req.connection
更改为
req.dbconn
这似乎解决了问题

app.use(function (req, res, next) {
   req.dbconn = mysqlConnection
   res.locals = {
      version: 'version'
   };
   next();
});

您的两行代码:

  req.connection = mysqlConnection;
  res.locals = {
    version: '1'
  };
应该避免,因为req.connection和在express中都是某种保留对象,第一个包含连接数据,如IP和其他头,而第二个应该用于作用域为当前请求的变量。根据您在代码中执行的其他操作,您将覆盖这两个,并且很可能会破坏在本例中显示为multer中的bug的内容。您已经修复了
req.connection
问题,但仍然可能会中断使用
res.locals
的其他中间件/函数,因此,您可以只添加自己的属性,而不是像这样重新初始化它:

res.locals.version = '1'

你完全正确。我的问题归结为
req.connection
,如果您提到这一点,那就太好了。感谢您指出我在重新初始化
res.locals
时遇到的潜在问题,我将立即更改该代码。看起来我提到了request.connection(已弃用),尽管我自己已经回答了这个问题,但我会给您+50,因为您指出了我代码的其他问题。是的,您解决了实际问题,因为您对代码也有了更多的上下文,但这更多的是为了阐明为什么它会打破您的方式。尽管我仍然对节点版本为什么会影响这一点感到困惑,但我假设,由于节点13中不推荐使用
req.connection
,节点14很可能正在破坏使用它的库代码,因此必须更新库以支持节点14。