Я хочу предоставлять статический контент для конкретного пользователя в Express. Это означает, что если пользователь вошел в систему, его личная статическая папка обслуживается экспресс. Другие пользователи не должны иметь доступа.
Я попробовал следующее (см. ниже), но статическое содержимое не обслуживается. На самом деле маршрут полностью игнорируется, и я получаю 404.
Я не уверен, что то, как я это делаю, является правильным, и если экспресс способен динамически обслуживать разные статические папки. Заранее спасибо за ваши мысли по этому поводу.
Вот код (упрощенный):
маршруты.js:
express = require 'express'
router = express.Router()
router.use '/user/assets', (req, res, next) ->
if req.user
userpath = 'uploads/' + md5(req.user._id)
if not fs.existsSync userpath
fs.mkdirSync userpath
console.log "Created user directory at " + userpath
express.static(userpath)
next()
module.exports = router
index.js:
express = require 'express'
app = express()
app.use '/', require './routes'
Примечания:
md5 — это просто способ избежать странных символов в идентификаторе пользователя, который является строкой. Я знаю, что есть вероятность несоответствия, которое ничтожно мало и о котором я не хочу сейчас заботиться. Приветствуются опасения по поводу общей безопасности способа решения. Код написан на CoffeeScript.
req.user
содержит допустимый пользовательский элемент.