Expressjs очень хорошо компонуется.У вас может быть экспресс-приложение верхнего уровня, которое направляется к суб-экспресс-приложениям и обслуживает ваши отдельные сервисы.
Допустим, вы хотите обслуживать ваш интерфейс взаимодействия с www.example.com
, а ваш админ (просмотр мопса) с www.example.com/admin
, и вы также хотите иметь API, который будет обслуживать интерфейс по адресу www.example.com/api`.
Вы хотели бы что-то вроде следующего примера кода, который демонстрирует состав экспресс-приложений,Я не запускал код, но этого должно быть достаточно, чтобы начать работу.
// This parent app acts as a parent layer and router
// for all your "sub apps". Any middleware you apply
// to this express app will apply to *all your other
// sub-apps*.
const parentApp = express();
// We now create another express instance, this will
// house the API. It can be in another file and you
// could require in something like "require('api');"
// instead but for brevity we'll keep it all in one
// file.
const apiApp = express();
apiApp.get('/info', (req, res, next) => {
console.log('/info');
return res.sendStatus(200);
});
// Mount the sub app on the /api route. This means
// you can how hit 'www.example.com/api/info' and
// you'll get back a 200 status code.
parentApp.use('/api', apiApp);
// Now we setup the admin app which we'll add pug
// views into. This is an example so just pretend
// the views exist.
const adminApp = express();
adminApp.set('views', './views');
adminApp.set('view engine', 'pug');
adminApp.get('/login', (req, res, next) => {
return res.render('login', { title: 'Hey' });
});
// Mount the sub app on the /admin route. This way
// we can hit www.example.com/admin/login to get
// our login page rendered.
parentApp.use('/admin', adminApp);
// Now we create and mount the frontend app that
// serves our fully built react app. You could do
// this with nginx instead but you wanted to do
// it with express so lets do it that way.
const frontendApp = express();
frontendApp.use(express.static('/frontend));
parentApp.use('/', frontendApp);
Если вы не хотите создавать себе экспресс-приложение верхнего уровня (и, таким образом, создавать немного монолитного приложения)тогда я бы порекомендовал проверить документацию по nginx или документацию по используемому вами HTTP-серверу.У вас должна быть возможность направлять запросы к конкретным конечным точкам различным узлам приложений, работающих на разных портах.Статические файлы могут затем обслуживаться вашим сервером HTTP.Это определенно более эффективный и элегантный подход, но так как вы спросили о экспрессе, я хотел продемонстрировать этот подход в первую очередь.