【问题标题】:req.files is always null express-fileuploadreq.files 始终为空 express-fileupload
【发布时间】:2020-06-09 01:48:00
【问题描述】:

TLDR : express-jwt 与在 node.js API 的 req 参数中添加内容的包产生冲突(例如 express-upload,multer)。

我正在开发 node.js API,但我无法删除任何包。我正在尝试将文件从前端上传到 API。我为此使用了许多软件包(express-fileupload、multer ...),但它们都没有解决我的问题。创建 API 的人使用 express-jwt 进行身份验证。它通过在 API 的 req.user 字段中添加一些信息来工作。

我的问题是 nodejs 中用于上传文件的包似乎与 express-jwt 冲突。如果我禁用它,req.files 会按原样填充,并且一切正常。但是当我重新安装 express-jwt 时,req.files 始终为空。我不能只使用另一个身份验证包。我不知道如何解决这个问题。

【问题讨论】:

  • 您可以引入一个自定义中间件函数,该函数在express-fileupload 之后和express-jwt 之前运行,然后将req.files 的内容存储在res.locals.files 内,然后改用它。这是选项之一。
  • @goto1 好的,所以在评论这一行之后:app.use(expressJwt({secret: PUBLIC, strict : false}).unless({path : unless}));,req.files 不再为空。我不明白,因为导致问题的代码行在第一个中间件中,并且 express-fileupload 出现在我正在使用的路由之前......知道吗?
  • 我不确定这些包在幕后是如何工作的,所以我不确定发生了什么。我建议在expressJwt 中间件之前和之后记录req.files,看看是否有任何区别。
  • @goto1 你是对的,它现在可以工作了。感谢您的宝贵时间。

标签: node.js express multer express-jwt


【解决方案1】:

我想通了。您必须先调用 express-fileupload 中间件。我添加了以下代码,之后调用的任何中间件都可以访问 req.files。

const fileUpload = require('express-fileupload');
app.use(fileUpload());
app.use((req: any, res: any, next: any) => {
    console.log("user :  " + req.user + " ===== files : " + req.files);
    next();
})

无论出于何种原因,如果您首先调用 express-jwt,req.files 将不会被填充。对我来说,引起冲突的就是这一行:

app.use(expressJwt({secret: PUBLIC, strict : false}).unless({path : unless}));

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2018-03-03
    • 2017-04-20
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多