我正在嘗試創建一個使用 node.js 和 Express 的檔案服務器。我當前設定了系統,以便每個用戶都有一個檔案目錄。我目前已將其設定為使用托管整個檔案系統
app.use(express.static(testFolder));
這種方法的問題是任何人都可以查看任何人的檔案,即使他們沒有登錄。我已經看過并且其他人建議不要托管整個檔案系統,而是使用 res.sendFile(specific file) 。人們還建議使用中間件來檢查用戶是否經過身份驗證。
我的問題是,對于照片,我設定了照片路由和 EJS 檔案,以便對于所有照片,要查看的照片都呈現在 .ejs 檔案中。
我將如何 res.sendFile() 然后將其呈現在 .ejs 檔案中?正如 res.sendFile() 僅顯示具有白色背景且沒有自定義的照片。
這是路線的代碼:
router.post("/view/photo", function(req, res){
var path = req.body.currentPath
var filename = req.body.fileName
var currentUser = req.body.currentUser
var files = fs.readdirSync(path)
var images = []
var fileExtensions = ['jpg', 'jpeg', 'gif', 'png']
for(var i = 0; i < files.length; i ){
fileExtension = files[i].split(".")[1]
if(fileExtension){
if(fileExtensions.includes(fileExtension.toLowerCase())){
images.push(files[i])
}
}
}
var indexOfFile = images.indexOf(filename)
var next = indexOfFile 1;
var previous = indexOfFile - 1;
if(next > images.length - 1){
next = next - (images.length)
}
if(previous < 0){
previous = previous (images.length)
}
path = path.split("/")
path = path.splice(path.indexOf(currentUser, 0), path.length)
path = path.join("/")
finalPath = "../" path "/" filename
var nextFileName = images[next]
var prevFileName = images[previous]
res.sendFile(req.body.currentPath "/" filename);
// res.render("showPhoto.ejs", {photoPath: finalPath, filename: filename, currentPath: req.body.currentPath, next: nextFileName, prev:prevFileName });
})
uj5u.com熱心網友回復:
忘記替換express.static為sendFile. 那是一條紅鯡魚。
如果您只想允許經過身份驗證的用戶查看任何內容,請添加中間件以檢查他們是否在提供任何內容的路由上經過身份驗證。
路由如何提供任何東西都沒有關系,只是您在做之前對用戶進行身份驗證。
如果路由用于static提供影像檔案,則在它之前添加一些身份驗證中間件。如果路由用于render生成包含<img>指向前面提到的靜態路由的 HTML 檔案,則在它之前添加一些身份驗證中間件。等等
router.post(
"/view/photo",
authenticationMiddleware,
photoPostingEndpointFunction
);
router.use(
"/photos",
authenticationMiddleware,
express.static('path/to/protected/photos)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/472504.html
標籤:javascript 节点.js 表示
