Express.js: как передать объект req в промежуточное ПО без создания нового маршрута с Multer - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок как в Express.js, так и в StackOverflow;Извините, если это дублирующий вопрос.Я проверил, но не увидел ничего релевантного.

Итак, я использую Multer + Express, чтобы позволить пользователю загружать изображение, которое будет называться '${username}.{extension}', на серверную часть / uploads/ папка.Я не хочу, чтобы пользователи могли сохранять более одного изображения на сервере (т. Е. Не "user1.jpg" и "user1.png").Для этого я написал следующее промежуточное программное обеспечение:

function deleteUserImage(req){
    const acceptedExtensions = ['.png', '.jpg', '.jpeg', '.tif', '.tiff', '.JPG', '.bmp'];
    acceptedExtensions.forEach(char => {
        if(fs.existsSync(`./uploads/${req.cookies.username+char}`)){
            fs.unlinkSync(`./uploads/${req.cookies.username+char}`);
        }
    })
}

Затем я смог получить необходимую функциональность по следующим маршрутам:

app.post('/process_upload-image', (req, res, next) => { //User sends post req w/ image file
    deleteUserImage(req) //images for that user are cleared.
    next();
})

app.post('/process_upload-image', upload.single('user-image'), (req, res, next) => {
    res.redirect('/welcome'); //user is redirected after multer uploads the image.
})

Мне было интересно, было ли это лучше-практикует, однако, так как в итоге вы получаете два маршрута, прослушивающих один и тот же URI?Есть ли способ передать req в deleteUserImage (), а затем вызвать upload.single () ... все по одному маршруту?

Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете просто связать несколько промежуточных программ на одном маршруте.Измените функцию deleteUserImage на:

function deleteUserImage(req, res, next){
   const acceptedExtensions = ['.png', '.jpg', '.jpeg', '.tif', '.tiff', '.JPG', '.bmp'];
   acceptedExtensions.forEach(char => {
       if(fs.existsSync(`./uploads/${req.cookies.username+char}`)){
           fs.unlinkSync(`./uploads/${req.cookies.username+char}`);
       }
   })

   next()
}

, затем удалите первый маршрут и измените второй на:

app.post('/process_upload-image', deleteUserImage, upload.single('user-image'), (req, res, next) => {
    res.redirect('/welcome');
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...