Вопрос по middleware, connect, httpserver, static-files, node.js – Логика статического файлового сервера 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 будет выглядеть так:

<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/screen.js"></script>

То есть я загружаю два файла из разных мест. В основном, мысль здесь"check if file is in /share, if not, try loading it from folder according to port".

А вот текущий код, который я использую:

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

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

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

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
Прекрасный. Я знал, что было больше.use() чем кажется на первый взгляд. Кажется, Тим проделал большую работу здесь. Christian

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