Шаблон для зависимостей Express / Node: Могу ли я использовать отдельный файл служб для экземпляра приложения? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть приложение express / node, и я хочу сделать экземпляр приложения доступным в нескольких файлах без циклических ссылок (например, перед тем, как объект маршрутов был включен в express, вам нужно было бы экспортировать объект приложения в маршруты файл .js, но затем этот файл rout.js затем экспортируется обратно в основной файл app.js).

Хотя я знаю, что объект маршрутов решает этот сценарий использования, я пытаюсь выяснить, сработает ли другой шаблон / является ли это наилучшей практикой.

ТАК ... могу ли я иметь отдельный файл служб, в котором мне требуется экспресс, а затем в этом файле служб создать приложение? И чтобы моя основная корневая папка, а также n других папок (каждая из которых могла иметь свою округлость) безопасно требовали приложения из этой службы.

Example Folder structure
├── app.js   // main file; ordinarily would have required routes.js
├── routes
    ├── routes.js // ordinarily would have required top app.js for app object
├── services
    ├── firebase.js
    ├── amplitude.js
    └── app.js // instead, create app here and export it to both above

Так, например, три файла могут выглядеть так:

app.js (основной)

const app = require('./services/app');
app.listen(3000, () => console.log('Listening on port 3000));

маршруты / routes.js

const app = require('../services/app');
app.get('/', (req, res) => res.send('hello world'));

Услуги / app.js

const express = require('express');
const app = express();
module.exports.app = app;

Это безопасная / лучшая практика?

1 Ответ

0 голосов
/ 04 июля 2018

Так как это module.exports.app = app, это не должно быть

const app = require('./services/app');

но

const { app } = require('./services/app');

Это не выглядит очень элегантно, но будет работать.

Поскольку routes.js и т. Д. Должны загружаться в строгом порядке, чтобы связующее ПО и маршруты работали должным образом, этот подход не делает их слабосвязанными и не дает очевидных преимуществ.

Обычная практика - делать все наоборот и загружать промежуточное ПО в app.js. Маршруты не нуждаются в экземпляре app, как описано в этом руководстве , они могут использовать экземпляр маршрутизатора и затем подключаться к / в точке входа:

routes.js

const express = require('express');
const router = express.Router();

router.get('/', (req, res) => res.send('hello world'));

module.exports = router;

app.js

const express = require('express');
const app = express();

const router = require('./routes');

app.use('/', router);
app.listen(3000, () => console.log('Listening on port 3000'));
...