2015-12-29 3 views
0

Допустим, что я обслуживаю следующий файл index.html, который находится в корневом каталоге через сервер express.Ресурсы не загружаются в экспресс

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 

<h1>Hello</h1> 

<script src="/public/system.js"></script> 
<script src="/public/config.js"></script> 
<script>System.import("app/main")</script> 
</body> 
</html> 

Оба system.js и config.js находятся в папке публичного каталога.

Чтобы получить index.html, чтобы загрузить эти файлы, которые я должен включать следующую строку в моем app.js файле поэтому запросы могут быть найдены в общей папке:

app.use(express.static(path.join(config.root, 'public'))); 

Почему это так? Почему не может index.html правильно ссылаться на файлы без указанной выше строки, так как правильный путь к ресурсам соответствует правилу src? То же самое касается app/main. Нужно ли использовать каждый ресурс index.html статически через app.use()?

ответ

1

Веб-сервер node.js по умолчанию не обслуживает ЛЮБЫЕ файлы. Итак, только потому, что у вас есть маршрут, который обслуживает index.html, это не означает, что любой другой файл обслуживается node.js. node.js не похож на другие веб-серверы, которые сначала считают себя файловыми процессами, а во-вторых, серверами приложений. node.js дает вам полный контроль, и по умолчанию он не поддерживает файлы. Если вы хотите, чтобы он обслуживал каталог статических файлов (например, файлы сценариев), то одна строка кода app.use(express.static(...)) заставит его обслуживать все файлы в определенном каталоге.

Если вы спрашиваете, почему тот же статический маршрут, который служит index.html, не обслуживает два других файла, тогда это будет просто случай, когда пути и местоположения файлов не будут выровнены, чтобы их можно было найти соответствующим образом. Поскольку вы на самом деле не дали нам полной информации о структуре вашей файловой системы или структуре пути, мы не можем предложить точную информацию о том, что вы должны изменить.

Если system.js и config.js находятся в том же каталоге, что и index.html, то вы должны удалить путь перед их тегами сценария. Если они не находятся в одном каталоге, вам может понадобиться еще один app.use(express.static(...)), который охватывает другую комбинацию пути/каталога.

Нужно ли использовать каждый ресурс index.html статически через app.use()?

Нет, это не, если он находится в том же месте, index.html и называется по тому же пути, и если вы используете express.static(), который охватывает всю эту директорию.

Каждый ресурс, на который вы хотите отправить сервер node.js, должен быть определен определенным маршрутом на вашем сервере. Некоторые маршруты могут охватывать многие файлы или весь каталог файлов, но каждый запрос, который вы хотите работать, должен быть покрыт маршрутом.

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