Zappa (Express JS) — настраиваемый путь доставки активов

Мне нужно ответить на запросы http get для обслуживания активов. Мне нужна помощь, чтобы написать маршрут, соответствующий следующему описанию.

Информация о пути

  • Имеет настраиваемый префикс ( basePath )
  • Имеет сегмент, который сопоставляется с реальным файлом в общей папке ( path )
  • Форма: [basePath]/[path]

Ex:

http://localhost:3000/app/collage/components/bootstrap/dist/css/bootstrap.min.css
basePath = '/app/collage' # set through CLI arguments when app loads
path = '/components/bootstrap/dist/css/bootstrap.min.css' # Comes from route

Что мне нужно:

Мне нужно написать метод получения, который будет реагировать на указанный выше тип URL-адреса, читать файл и отправлять его пользователю. Следующее, очевидно, не работает, но я думаю, теперь вы знаете, о чем я прошу.

@get "#{settings.basePath}/:path", (req, res) ->
  res.sendFile __dirname + "public" + req.params.path

ПРИМЕЧАНИЕ. Вышеизложенное относится к

Попытка создать настраиваемый маршрут для доставки активов.


person Ziyan Junaideen    schedule 05.12.2013    source источник


Ответы (1)


IIRC, трюк Express «:parameter» не соответствует косой черте, поэтому его нельзя использовать для сопоставления «пути». Вместо этого просто создайте собственное регулярное выражение. ;о)

«IIRC», потому что я думаю, что у меня была такая же проблема. Но "используй источник, Люк", верно? Я предполагаю, что источником (каламбур) этого ограничения может быть строка 300 файла ./node_modules/express/lib/utils.js в функции exports.pathRegexp:

.replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)?/g, function(_, slash, format, key, capture, optional, star){

Или, может быть, это строка 307:

(format && '([^/.]+?)' || '([^/]+?)')

где косые черты явно исключены?

В любом случае, параметры маршрута, назначенные здесь «ключу», явно соответствуют (\w+). Я слишком ленив, чтобы понять, для чего используются «захват» и «звезда». Справочная документация по API, я думаю, отстой, так что, может быть, вы захотите перепроектировать код?

ХТН?

person Dream    schedule 30.12.2013