Задать вопрос

Node js, Как правильно подключить скрипты, картинки и др?

Здравствуйте. Недавно стал изучать node js, столкнулся с проблемой, обойти которую не могу уже некоторое время. Имеется сервер, написанный на js с начинкой, взятой с первого попашегося ресурса:
var express = require("express");
var logfmt = require("logfmt");
var fs = require('fs');
var index = fs.readFileSync('Framework/index.html');
var app = express();
app.use(logfmt.requestLogger());
app.get('/', function(req, res) {
    res.end(index);
});
var port = Number(process.env.PORT || 5000);
app.listen(port, function() {
    console.log("Listening on " + port);
});

по адресу Framework/index.html есть вьюха, которая не отображает стрипты и картинки, к ней подключенные. При всем этом файл index.html исправно открывается в браузере, скрипты работают. Но на локальном сервере-ни в какую. Более подробно можно посмотреть тут, это, собственно, сам проект.
  • Вопрос задан
  • 11283 просмотра
Подписаться 7 Оценить Комментировать
Решения вопроса 1
ghaiklor
@ghaiklor
NodeJS TechLead
How can I serve statics from several directories?
You may typically use any middleware several times within your application. With the following middleware setup and a request to "GET /javascripts/jquery.js" would first check "./public/javascripts/jquery.js", if it does not exist then the subsequent middleware will check "./files/javascripts/jquery.js".

app.use(express.static('public'));
app.use(express.static('files'));

FAQ
Вам нужно прописать публичные папки, где расположены ассеты для загрузки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Проблема в том, что текущая реализация вашего сервера не предусматривает отдачу статических ресурсов (изображений, скриптов и т.п.). Единственный запрос на который может отвечать ваш сервер описан в этом рауте (строки 7-9):

app.get('/', function(req, res) {
    res.end(index);
});

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

Модуль express расширяет функционал модуля connect, у которого есть middleware-обработчик 'static', позволяющий задать путь по которому ваш сервер будет отдавать статические ресурсы.
Если ресурсы расположены в папке "public", то middleware можно подключить следующей строкой кода:

app.use(express.static(__dirname + '/public');
При использовании middleware-обработчиков следует понимать, что они выполняются в том же порядке, в котором они прописываются в коде. Кадый middleware может выполнить один из трёх сценариев:
1. Прервать цепочку middleware-обработчиков, ответив на запрос пользователя.
2. Преобразовать объект response и/или request и продолжить выполнение цепочки midleware-обработчиков .
3. Ничего не делать (просто передать управление следующему middleware)
Учитывая, что static выполняет первый либо третий сценарии, скорее всего, будет правильно поместить middleware static в начало цепочки, чтобы сразу исключить выполнение последующих middleware, если клиент запрашивает статику.
Документация по middleware static:
www.senchalabs.org/connect/static.html
Ответ написан
Комментировать
Diel
@Diel
Если вам еще нужен ответ, напишите в комментарий. Делаю свой сервак на ноде и он умеет отдавать файлы браузеру (не на Express.js)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы