2015-01-15 1 views
0

Я пытаюсь использовать express.static для обслуживания изображения на http://localhost:3000/logo/logo.jpg. Изображение logo.jpg в /общественных/изображений и мой код:Node.js + Express.js: express.static не работает изображение (содержит ошибки)

app.use("/logo", express.static(__dirname + '/public/images')); 

страница загружается, но изображение нарушается. Firefox говорит: Изображение на http://localhost:3000/logo/logo.jpg не может быть отображено, так как оно содержит ошибки. Когда я просматриваю информацию о странице, Firefox сообщает мне размеры изображения для logo.jpg 0x0. Я пробовал использовать различные изображения и разные браузеры, но все они имеют одинаковую проблему.

Как правильно загрузить изображение?

+0

Каковы данные ответа с вашего сервера? Уверен, что есть ошибка или что-то в этом роде. – Brad

+0

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

ответ

0

Я не мог получить свой каталог со статическими файлами, но когда я начал использовать path.join, он начал работать как ожидалось. Попробуйте следующее:

var path = require('path'); 
app.use('/logo', express["static"](path.join(__dirname, 'public/images'))); 
+0

У меня есть уверенность в этом ответе: глядя на то, что я делал подобное в прошлом, он довольно хорошо подходит (например, «app.use (express.static (path.join (__ dirname,« public »))); ") –

0

Я нашел преступника. По какой-то причине, если я поместил строку:

app.use("/logo", express.static(__dirname + '/public/images')); 

после этого кода:

// load liveReload script only in development mode 
// load before app.router 
// development only 
if ('development' == app.get('env')) { 
    var liveReloadPort = 35729; 
    var excludeList = ['.woff', '.flv']; 

    app.use(require('connect-livereload')({ 
     port: liveReloadPort, 
     excludeList: excludeList 
    })) 
} 

Это не сработало. Однако, если я переместил строку app.use ("/ logo") ... перед кодом liveReload, она работает.

Непонятно, почему позиция повлияла на то, как работает код, но по крайней мере он это делает!

+0

В Express 4 обработчики промежуточного слоя/маршрута выполняются в порядке их добавления в приложение Express или маршрутизатор. – mscdex

+0

Итак, зачем загружать скрипт liveReload до того, как express.static сделает express.static неработоспособным? – Dev

+0

Похоже, что 'connect-livereload' делает некоторые исправления обезьян, поэтому возможно, что он мутирует выход (неправильно). – mscdex

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