2012-04-02 2 views
2

У меня есть приложение nodejs и я использую expressjs. Я определил свой статический каталог, но когда я его открываю, он не загружается. Мой экспресс-конфигурации является:Expressjs не распознает статические файлы

var app = express.createServer().listen(8001); 
app.configure(function(){ 
     app.use(express.methodOverride()); 
     app.use(express.bodyParser()); 
     app.use(app.router); 
     app.use('/public', express.static(__dirname + '/public')); 
     app.use(express.cookieParser()); 
     app.use(express.session({ secret: "appsession" })); 
     app.use(express.errorHandler({showStack: true, dumpExceptions: true})); 
     app.set('views', __dirname + '/views'); 
     app.set('view engine', 'hbs'); 
}); 

Внутри моего /public каталог У меня есть 3 папки, CSS, JS, и IMG. Внутри css у меня есть style.css. Когда я пытаюсь получить к нему доступ напрямую через http://localhost:8001/public/css/style.css, я получаю: Cannot GET /public/css/style.css

Любые идеи, что я могу делать неправильно?

Спасибо!

EDIT:

Это, кажется, связано с тем, как у меня есть мои настройки маршрутов. Я делаю это так:

 var routes = require('./routes')(db); 
    pp.get('/', routes.index); 

Тогда в моем index.js файл, у меня есть:

module.exports = function(db) { 
    return { 

     index: function(req, res, next) { 
       res.render('index'); 
      } 
     } 
    } 

У меня включена моя обработка ошибок, но когда я использую маршрут таким образом, это Безразлично 't use выражает обработку ошибок, однако, если я это сделаю, это так.

ответ

3

Изменение статического обработчика к этому:

app.use('/public/css', express.static(__dirname + '/public/css')); 

Тогда http://localhost:8001/public/css/style.css должен получить то, что вы хотите

Полный пример приложения, которое позволяет curl http://localhost:8001/public/css/style.css:

app.js 
|-public 
    |-css 
    |-style.css 

var express = require("express"), 
    app = express.createServer(); 
app.use('/public/css', express.static(__dirname + '/public/css')); 
app.listen(8001); 
+0

Да, это не работает. – dzm

+0

Извините, забыли о вложенной папке. Ответ обновлен. –

+0

статический обработчик пересекает подкаталоги. –

4

Вы установки статического HTTP промежуточного слоя, как следует:

app.use(express.static(__dirname + '/public')); 

и получить файл в ./public/css/style.css с URL:

"/css/style.css" 

публика не является частью пути, когда вы на самом деле запросить файл.

+1

Пытался получить доступ к этому - то же самое дело Не может GET /css/style.css – dzm

+0

есть ли что-нибудь в вашем консольном журнале при попытке получить к нему доступ? –

+0

также проверяет разрешения на ваши файлы, но это то, как работает статическое промежуточное программное обеспечение express/connect. Он отлично обрабатывает подкаталоги. –

0

был запущен в тот же вопрос нашел ответ здесь

https://github.com/senchalabs/connect/issues/298

Когда вы попытаетесь использовать вложенные файлы, своего рода заблудиться,

он говорит фиксируется на трекере год назад, однако я пробовал сегодня и работал нормально

0

Я понял.

У меня на моем хосте две службы. Django запускает сайт в корне: , а затем Node работает на http://myURL.com/node

Конфигурация в порядке со всеми файлами в узле. Файл index.html запрашивается в порядке, но index.html, когда он запрашивает таблицы стилей и статические файлы, этот запрос попадает в Django, прежде чем он превратится в узел. Django увидел файл и понятия не имел, что это такое, и возвратил ошибку 404.

Отключив Django от поиска запросов к этим файлам, все работает нормально.

Смежные вопросы