2015-12-09 6 views
2

Я учусь использовать NodeJS и Express и просто использовал «экспресс» для создания строительных лесов для проекта. Я не понимаю, цели:Почему опускает строку app.use (express.static (__ dirname, 'public')) останавливает мои html-страницы от загрузки файлов css?

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

Моего понимание app.use() является то, что он загружает функцию, как промежуточные, так app.use(express.static(path.join(__dirname, 'public'))) должен нагружать функцию, не так ли? Эта функция загружает пути к некоторым файлам, которые я объявляю статическими?

В моем файле layout.jade, у меня есть эта линия в голове:

link(rel='stylesheet', href='/stylesheets/style.css')

Как мое приложение знать, чтобы начать HREF связь с «/ общественность» (если это то, что он делает), когда я установил линию app.use(express.static)? Потому что, когда я избавляюсь от строки app.use(express.static), он дает 404 для поиска файла css, даже когда я изменяю href на '/public/stylesheets/style.css'.

И как он знает, что я пытаюсь получить доступ к этому статическому файлу? Что делать, если у меня есть файл с именем «root/stylesheets/style.css», а также «root/public/stylesheets/style.css»?

ответ

6

Справа, app.use() загружает функцию, которая будет использоваться в качестве промежуточного программного обеспечения. В этом контексте он загружает результатexpress.static(path.join(__dirname, 'public')).

Результатом express.static(path.join(__dirname, 'public')) является функцией (в JavaScript функции могут возвращать функции), функция, которая выражает понимает как промежуточный слой (т.е. имеет следующую подпись: function(request, response, next) {

express.static() это функция, которая принимает путь и возвращает промежуточное программное обеспечение, которое обслуживает все файлы по этому пути до /. (Если вы хотите префикс его /public или что-то еще, напишите app.use('/public', express.static(path.join(__dirname, 'public'))), где первый /public - это веб-путь, а второй - путь к файловой системе файлов, которые подаются).


Для большей наглядности следующие:

app.use('/a', express.static(path.join(__dirname, 'b'))); 

будет обслуживать все файлы внутри каталога b, и они доступны через http://example.com/a/FILE.

+0

Спасибо за быстрый ответ. Но как 'layout.jade' знает, где найти' style.css'? Доступен ли он через http: // example.com/ stylesheets/style.css? –

+0

Ну, в каталоге '/ public' на вашем сервере есть каталог' stylesheets', внутри которого есть 'style.css'. 'express.static()' знает, что рекурсивно решает каталоги. –

+0

Что произойдет, если у меня есть два файла 'style.css'? Он просто возвращает первый найденный? Так что 'express.static (path.join (__ dirname, 'public'))' служит всем файлам '/' (это были бы все файлы или просто прямые дочерние файлы '/'?) С содержимым '/public', и вот как 'layout.jade' может получить доступ к'/stylesheets/style.css'? –

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