У меня есть структура каталогов для спокойного экспресс-сервиса + клиент Backbone с включенным pushState (клиентский код в public/
)
app.js
lib/routes.js
-- public/
-- index.html
Я установил /public
как статический каталог в app.configure
:
app.use(express.static(__dirname + '/public'));
Это уже работает с места в карьер, если индекс посещается первым.
Затем, когда я напрямую посещаю маршрут, отличный от домашней страницы, я перенаправляюсь на index.html
. Это прекрасно работает в app.js
, но если я попытаюсь вставить это в lib/routes.js
, я получу ошибку Forbidden:
От app.js
отлично работает:
app.get('*', function(req, res) {
res.sendfile(__dirname + '/public/index.html');
});
От lib/routes.js
:
res.sendfile(__dirname + '../public/index.html');
Дает мне:
Error: Forbidden
at SendStream.error (/Users/*****/Sites/myproject/node_modules/express/node_modules/send/lib/send.js:145:16)
at SendStream.pipe (/Users/*****/Sites/myproject/node_modules/express/node_modules/send/lib/send.js:307:39)
at ServerResponse.res.sendfile (/Users/*****/Sites/myproject/node_modules/express/lib/response.js:345:8)
at /Users/*****/Sites/myproject/lib/routes.js:8:7
at callbacks (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:164:37)
at param (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:138:11)
at pass (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:145:5)
at Router._dispatch (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:173:5)
at Object.router (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:33:10)
at next (/Users/*****/Sites/myproject/node_modules/express/node_modules/connect/lib/proto.js:193:15)
Если я просто попробую:
res.sendfile('/public/index.html');
Он не может найти файл, и я получаю:
Error: ENOENT, stat '/public/index.html'
Подводя итог, как я могу использовать sendFile
и передать public/index.html
из lib/routes.js
, не получая запрещенную ошибку?
../public/index.html
. Смотрите обман. - person Joe   schedule 07.04.2014