Является ли это возможным? Я хотел бы создать два разных каталога для обслуживания статических файлов. Скажем, / public и / mnt
Ответы:
Вы также можете установить путь, по которому статические файлы будут отправляться в Интернет, указав дополнительный (первый) параметр, 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
.
Кстати, это также полезно, если вы не хотите, чтобы static обслуживал файлы из корня вашего сервера, а скорее из более квалифицированного пути.
HTH
"homepage": "/public"
и "homepage": "/public2"
в соответствующее приложение для реакции package.json. Для получения дополнительной информации об использовании двух приложений для реагирования см. Мой ответ здесь stackoverflow.com/a/48569896/4746648
shared
папка, чтобы вы могли использовать ее, "./"
и "./shared"
вы могли легко обмениваться файлами js: 3 Спасибо
Вы также можете «объединить» каталоги в один видимый каталог.
Структура каталогов
/static
/alternate_static
Код
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
И static, и 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
это путь запроса.
Посмотрите подробнее на 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 не актуальны, но по-прежнему возможно использование нескольких статических промежуточных программ.
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