Настройка двух разных статических каталогов в каркасе node.js Express - PullRequest
90 голосов
/ 12 мая 2011

Возможно ли это? Я хотел бы создать две разные директории для обслуживания статических файлов. Допустим, / public и / mnt

Ответы [ 4 ]

141 голосов
/ 29 сентября 2012

Вы также можете указать путь, по которому статические файлы будут передаваться в Интернет, указав для дополнительного (первого) параметра значение use(), например:

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

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

Другими словами шаблон URL:

http://your.server.com/public/*

Служит для файлов из локального каталога public while:

http://your.server.com/public2/*

Служит для файлов из локального каталога public2.

Кстати, это также полезно, если вы не хотите, чтобы static обслуживал файлы из корня вашегосервер, а не с более точного пути.

HTH

49 голосов
/ 12 февраля 2013

Вы также можете "объединить" каталоги в один видимый каталог

Структура каталогов

  • /static
  • /alternate_static

Код

app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));

И static, и alternate_static будут обслуживаться так, как если бы они находились в одном каталоге.Остерегайтесь сгустков имен файлов, хотя.

40 голосов
/ 12 мая 2011

Это невозможно с помощью одного внедрения промежуточного программного обеспечения, но вы можете внедрить static промежуточное программное обеспечение несколько раз:

app.configure('development', function(){
    app.use(express.static(__dirname + '/public1'));
    app.use(express.static(__dirname + '/public2'));
});

Объяснение

Посмотрите на connect / lib / middleware / static.js # 143 :

path = normalize(join(root, path));

Существует options.root - статический корень, который вы определяете в вызове express.static или connect.static, а path - путь запроса.

Посмотрите больше на connect / lib / middleware / static.js # 154 :

  fs.stat(path, function(err, stat){
    // ignore ENOENT
    if (err) {
      if (fn) return fn(err);
     return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
       ? next()
       : next(err);

Путь проверяется только один раз, и если файл не найден, запрос передается следующему промежуточному программному обеспечению.

Обновление для Connect 2.x

Ссылки на код неактивны для Connect 2.x, но по-прежнему возможно многократное использование статического промежуточного программного обеспечения.

1 голос
/ 27 сентября 2018
const express = require('express');
const path = require('path');
const pagesPath = path.join(__dirname, '/cheatsheet');
const cssPath = path.join(__dirname, '/stylesheet');
const port = process.env.PORT || 3000;

var app = express();

app.use("/cheatsheet" ,express.static(pagesPath));
app.use("/stylesheet",express.static(cssPath)); 

app.get('/',(request,response)=>{
    response.send('Hello CSS!!!');
  });

app.get('/bad',(request,response)=>{
response.send({error: 'Bad Request'});

});
app.listen(port, ()=> {
console.log(`Server is running on Port ${port}` );
console.log(__dirname);

});

// folder structure
/cheatsheet/index.html
/stylesheet/style.css
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...