簡體   English   中英

Express.js:如何將req對象傳遞給中間件而無需創建帶有Multer的新路由

[英]Express.js: How to pass req object to middleware w/o creating a new route w/ Multer

我是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()...?

謝謝!

您只需在一條路徑上鏈接多個中間件即可。 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');
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM