Відповіді:
Ви також можете встановити шлях, по якому статичні файли будуть надсилатись до Інтернету, вказавши додатковий (перший) параметр, use()як це:
app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));
Таким чином ви отримуєте два різних каталоги в Інтернеті, які відображають ваші локальні каталоги, а не один URL-шлях, який не проходить між двома локальними каталогами.
Іншими словами, шаблон URL:
http://your.server.com/public/*
Обслуговує файли з локального каталогу publicпри цьому:
http://your.server.com/public2/*
Обслуговує файли з локального каталогу public2.
BTW, це також корисно, якщо ви не хочете, щоб статичні обслуговували файли з кореня вашого сервера, а скоріше з більш кваліфікованого шляху.
HTH
"homepage": "/public"і "homepage": "/public2"до відповідних реагувати package.json додатки. Для отримання додаткової інформації про використання двох реагуючих програм див. Мою відповідь тут stackoverflow.com/a/48569896/4746648
sharedпапка, щоб ви могли використовувати "./"та "./shared"
Ви також можете "об'єднати" каталоги в єдиний видимий каталог
Структура каталогів
/static/alternate_staticКод
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
І статичні, і альтернативні_статичні будуть подаватися так, ніби вони перебувають у одному каталозі. Хоча слідкуйте за клоферами назви файлів.
main.jsв static/ньому не буде продовжувати дивитися в alternate_static/.
alternate_staticколи-небудь буде поданий.
Це неможливо одним введенням програмного забезпечення, але ви можете вводити 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це шлях запиту.
Подивіться більше на підключення / 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, але багаторазове використання статичного посередництва все ще можливе, як і раніше.
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