2015-07-03 2 views
0

Я пытаюсь сделать что-то вроде этого:`app.use (express.static`, кажется, не работает, если приложение - это подпрограмма

var main = express(); 
main.use(express.static(path.resolve('./asset'))); 
main.route('someroute', someHandle); 
var app = express(); 
app.use(express.static(path.resolve('./asset'))); 
app.route('someroute', someHandle); 
main.use('/app', app); 

активы /asset/someasset.js служили хорошо, но /app/asset/someasset.js не возвращается (404), пути . разрешающий правильных папки

Я попытался app.use('/app', express.static(path.resolve('./asset'))); - не работаю, но main.use('/app', express.static(path.resolve('./asset'))); - работа

есть некоторые ограничения для использования express.static с установленным SubApp

?

UPD:

Я пытаюсь использовать приложение устанавливается, как описано в http://expressjs.com/ru/4x/api.html#express app.mountPath ожидая, что все признаки явного монтажа, как к югу от приложения должны работать в нем, и, как наткнулась на статической задаче я хотел бы знать, есть ограничения в этом случае использования? и что они могут быть?

+0

Ну, потому что вы используете экспресс-приложение в качестве промежуточного слоя для другого специального приложения. Я не работаю. Взгляните на промежуточное ПО: http://expressjs.com/guide/using-middleware.html – Peyman

+0

@Peyman, означает ли это, что при использовании выражения в качестве промежуточного программного обеспечения он не может использовать другие посредники? я не нашел, что после ссылки, которую вы дали – skazska

+0

Это хороший вопрос, я не знаю, я думаю, вы, возможно, сможете, но я уверен, что вы не можете делать main.use ('/ приложение ", приложение). так как * приложение * является экземпляром экспресс-приложения, тогда как оно должно быть промежуточным программным обеспечением. express.static - это промежуточное программное обеспечение. – Peyman

ответ

1

Ваш случай использования выглядит хорошим кандидатом для экспресс-маршрутизатора, который является «изолированным экземпляром промежуточного программного обеспечения и маршрутов»:

http://expressjs.com/4x/api.html#router

В частности, попробуйте заменить

var app = express(); 

с

var app = express.Router(); 
+0

Спасибо за ответ, но я пытаюсь использовать смонтированное приложение, как описано в [http://expressjs.com/ru/4x/api.html#express](http://expressjs.com/ru/4x/api.html# express) app.mountPath – skazska

1

Редактировать: Ваше использование pat h.resolve - это все неправильно.

path.resolve('./asset')
в обоих случаях решает ту же папку. Точка монтирования промежуточного программного обеспечения влияет только на URL, а не на папку каталога. Перепишите свой код, как предложено ниже, и все будет работать так, как рекламируется

Моя догадка express.static по-прежнему работает на исходном пути. Так что попробуйте эту

var main = express(); 
 
main.use(express.static(path.resolve('./asset'))); 
 
main.route('someroute', someHandle); 
 
var app = express(); 
 
app.use(express.static(path.resolve('./app/asset'))); 
 
app.route('someroute', someHandle); 
 
main.use(app);

+0

Я пробовал это, id не помогает, но действительно 'main.use (express.static (path.resolve ('./ app/asset')));' работает. Вопрос в том, почему он не будет работать с subapp (app) – skazska

+0

_Is_, что ваш вопрос? Я думаю, что этот ответ правильный (и родной), учитывая ваш оригинальный пост.Возможно, вы захотите заглянуть в глобальный «__dirname». – userNaN

+0

Имеет ли someasset.js в папках/asset и/app/asset? Если да, то, как упорядочен ваш код, статические файлы в/актив будут сопоставлены сначала – takinola