req.files всегда имеет значение null express-fileupload

TL; DR: express-jwt создает конфликты с пакетами, добавляющими данные в параметр req API node.js (например, express-upload, multer).

Я работаю над API node.js и не могу удалить ни один пакет. Я пытаюсь загрузить файлы из внешнего интерфейса в API. Я использовал для этого много пакетов (express-fileupload, multer ...), но ни один из них не устранил мою проблему. Человек, создавший API, использовал для аутентификации express-jwt. Он работает, добавляя некоторую информацию в поле req.user API.

Моя проблема в том, что пакеты, используемые для загрузки файлов в nodejs, похоже, создают конфликты с express-jwt. Если я отключу его, req.files будет заполнен должным образом, и все будет работать отлично. Но когда я переустанавливаю express-jwt, req.files всегда имеет значение null. Я не могу просто использовать другой пакет аутентификации. Я не знаю, как решить эту проблему.


person Axel Ludwig    schedule 25.02.2020    source источник
comment
Вы можете ввести специальную функцию промежуточного программного обеспечения, которая запускается сразу после express-fileupload и перед express-jwt, затем сохранить содержимое req.files внутри res.locals.files и затем использовать его вместо этого. Это один из вариантов.   -  person goto1    schedule 25.02.2020
comment
@ goto1 хорошо, поэтому после комментария к этой строке: app.use(expressJwt({secret: PUBLIC, strict : false}).unless({path : unless}));, req.files больше не равно нулю. Я не понимаю, потому что строка кода, которая вызывает проблему, находится в первом промежуточном программном обеспечении, а express-fileupload появляется непосредственно перед маршрутом, на котором я работаю ... Есть идеи?   -  person Axel Ludwig    schedule 25.02.2020
comment
Я не уверен, как эти пакеты работают за кулисами, поэтому я не уверен, что происходит. Я бы посоветовал вести журнал req.files до и после expressJwt промежуточного программного обеспечения и посмотреть, есть ли разница.   -  person goto1    schedule 25.02.2020
comment
@ goto1 Вы были правы, теперь это работает. Спасибо за уделенное время.   -  person Axel Ludwig    schedule 25.02.2020


Ответы (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}));
person Axel Ludwig    schedule 25.02.2020