Вопрос по static-files, node.js, middleware, connect, httpserver – Логика статического файлового сервера Node.js (с использованием промежуточного программного обеспечения Connect)

1

Позволять'скажем, у меня есть следующая структура файловой системы:

/app/            Main application folder
  /app.js        Server JS file ran by node.js
  /public        Folder containing files for public website (port 80)
    /index.html
    /js/
      /game.js
  /admin/        Folder containing files used by local network system (port X)
    /index.html
    /js/
      /screen.js
  /share/        Folder containing files to be used by public website OR lan
    /js/
      /jquery.js

Конечным результатом является то, чтоadmin/index.html будет выглядеть так:



То есть ям загрузки двух файлов из разных мест. В основном, мысль здесь "проверьте, находится ли файл в/share, если нет, попробуйте загрузить его из папки в соответствии с портом ".

И здесь'текущий код, который ям с помощью:

var connect = require('connect'),
    sourcePublic = connect().use(
        connect.static(__dirname + '/public', { maxAge: 86400000 })
    ),
    sourceAdmin = connect().use(
        connect.static(__dirname + '/admin', { maxAge: 86400000 })
    ),
    sourceShare = connect().use(
        connect.static(__dirname + '/share', { maxAge: 86400000 })
    ),
    serverPublic = http.createServer(sourcePublic).listen(80),
    serverAdmin  = http.createServer(sourceAdmin).listen(90);
// ok, how do I use sourceShare?

PS: Эта система должна быть доступна черезhttp://host/ (возможно домен или статический ip) И доступ через локальную сеть через.http://host:90/

В то время как материал на порт 90 выигралне повредить систему (этопросто экран вывода) яЛучше, если люди не смогут получить к нему доступ извне (это легко сделать, обеспечив переадресацию порта 90 между маршрутизатором и сервером).

Ваш Ответ

1   ответ
2

Промежуточное программное обеспечение Connect является наращиваемым, поэтому вы можете достичь желаемого результата, просто размещая все нужные обработчики друг за другом. Общедоступный сервер получает/ общественности а также/доля обработчики и админ получает/ админ а также/доля обработчики.

Поэтому запрос к общедоступному серверу будет искать ресурс под/ общественности если там нет папки, то ищите в/доля папка. И админ-сервер делает это аналогично.

var connect = require('connect'),
    sourcePublic = connect().use(
        connect.static(__dirname + '/public', { maxAge: 86400000 })
    ).use(
        connect.static(__dirname + '/share', { maxAge: 86400000 })
    ),
    sourceAdmin = connect().use(
        connect.static(__dirname + '/admin', { maxAge: 86400000 })
    ).use(
        connect.static(__dirname + '/share', { maxAge: 86400000 })
    ),
    serverPublic = http.createServer(sourcePublic).listen(80),
    serverAdmin  = http.createServer(sourceAdmin).listen(90);
Последний вопрос, так что стек работает сначала снизу, верно? Christian
Нет, это работает сверху вниз ... Так что ты "использовать» первый будет вызван первым. DeadAlready
Прекрасный. Я знал, что было больше.use() чем кажется на первый взгляд. Кажется, Тим проделал большую работу здесь. Christian

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