Обучение Node - Экспресс-папка не работает

Итак, я новичок в node и пытаюсь узнать, как с ним использовать библиотеку express. Однако проблема, которую я пытаюсь понять, - это то, почему файлы в моей папке /public, похоже, не являются статическим контентом.

Здесь мой код:

var http = require('http');
var port = process.env.port || 1337;
var express = require('express');
var handlebars = require('express3-handlebars');
var path = require('path');

var application = express();

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

application.engine('handlebars', handlebars({ defaultLayout: 'main' }));

application.get('/', function(req, res){
    res.render('index.handlebars', { someProp: 3 });
});

application.listen(port);

И моя структура каталогов:

/
  - server.js (the above referenced file)
  / Views
    - index.handlebars
    / Layouts
      - main.handlebars
  / public
    - ServeMe.txt

Я понял, что application.use(express.static(path.join(__dirname, 'public'))); должен был настроить сервер для ответа на любой запрос в общей папке с этим ресурсом, если он найден. Что я делаю не так? Как ни странно, было проще настроить дескрипторы в качестве механизма просмотра, чем заставить эту общую папку работать = D

EDIT: полный URL-адрес, который я пытаюсь запросить: http://localhost:1337/public/serveme.txt

Я пробовал чувствительность к регистру (это должно быть не проблема), и это тоже не сработало.

Ответы

Ответ 1

Полный URL-адрес, который я пытаюсь запросить: http://localhost:1337/public/serveme.txt

Это ваша проблема. Все, что находится внутри каталога, который вы обозначаете как статический контент, предоставляется непосредственно из базового URL-адреса. Вам нужно запросить http://localhost:1337/serveme.txt.

Если вы хотите показывать только статические файлы из /public, вы можете передать строку в качестве первого аргумента:

application.use("/public", express.static(path.join(__dirname, 'public')));

Ответ 2

Из справки Express API

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

Эта строка отображает вашу общую папку по корневому URL-адресу вашего приложения. Это означает, что следующие запросы действительны и не выдают ошибку 404.

// GET /javascripts/jquery.js // GET /style.css // GET /favicon.ico

app.use также принимает необязательный первый аргумент, который позволяет вам указать, по какому URL-адресу запроса вы хотите показывать контент. Этот первый аргумент по умолчанию равен "/", что означает, что ваш статический контент будет обслуживаться по базовому URL. Если вы хотите, чтобы ваш статический контент обслуживался не на корневом уровне, как это делает ваш код в настоящее время, посмотрите следующий пример (снова взятый из документации)

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

Эта строка снова обслуживает вашу общую папку, но по вашему приложению/статическому URL, что делает следующие запросы действительными без ошибки 404.

(Пример URL: http://localhost:1337/static/anythingInYourPublicFolder)

// GET /static/javascripts/jquery.js // GET /static/style.css // GET /static/favicon.ico

Ответ 3

Какие URL-адреса вы пытаетесь загрузить? Вы должны не включать "общедоступные" в свои URL-адреса, поэтому curl -v 'http://localhost:1337/ServeMe.txt'.