Два приложения в expressjs

Я создаю приложение с express-js, у которого будут разные клиенты, такие как веб-и мобильные. Я не хотел использовать одно приложение для обоих, поскольку некоторое промежуточное ПО было бы дополнительным бременем. Например, как промежуточное ПО сеанса. Таким образом, для одного проекта возможно наличие двух приложений. И как это сработает?

Объект app который вы создаете в выражении, является функцией (req, res, next), которая подходит для собственных сетей промежуточного распространения Express. Таким образом, вы можете использовать app.use для отправки запросов, соответствующих app.use fragmentу пути, в приложение, определенное в другом месте.

Документы: http://expressjs.com/api.html#app.use

 $ npm install express //mobile.js var app = require('express')(); app.get('/', function(req, res){ res.send('Mobile Route') }); module.exports = app; //desktopApp.js var http = require('http'); var express = require('express'); var desktopApp = express(); var mobileApp = require('./mobile.js'); desktopApp.use('/mobile', mobileApp) desktopApp.use(desktopApp.router); desktopApp.use(express.errorHandler()); desktopApp.get('/', function(req, res){ res.send('Desktop Route') }); desktopApp.get('/mobile', function(req, res){ // Because Express respects the order that you set up the middleware chain, // the mobileApp `/mobile` route gets first dibs to send a response or next() res.send('Inaccessible Desktop Route') }); desktopApp.get('/mobile/foobar', function(req, res){ // When mobileApp can't find any suitable route matching this path, it gives // up, and desktopApp continues to pass the request down the middleware stack. // It ends up matching this route, where we send a response res.send('Desktop Route') }); http.createServer(desktopApp).listen(3000, function(){ console.log('Listening on 3000'); }); // Results $ curl localhost:3000/ Desktop Route $ curl localhost:3000/mobile/ Mobile Route 

См. Пример vhost в репозитории express github .

У вас может быть «основное» приложение, которое направляет запросы в одно приложение. Вы должны написать промежуточное программное обеспечение, чтобы установить условия, в которых запрашивается одно приложение. express.vhost – хороший пример, но, возможно, вам нужны другие проверки, кроме домена.

Основные-app.js

( Файл, вызываемый для запуска сервера. )

 // load dependencies var main = express(); main.use( express.vhost( 'mobile', require( './the-mobile-app' ) ); main.use( express.vhost( '*', require( './the-web-app' ) ); main.listen( /*...*/ ) 

the-mobile-app и the-web-app.js

 var app = express(); // // setup your application conf, middleware, and routes // module.exports = app; 

Я хотел бы поделиться другим подходом, который я недавно использовал в проекте:

 function renderAppropriate(template1, template2){ return function(req, res){ if(req.session && req.session.mobileOn){ res.render(template1); } else { res.render(template2); } }; }; app.get('/', function(req, res, next){ // do some stuff next() }, renderAppropriate('someMobileTemplate', 'someDesktopTemplate') );