快速/节点依赖项的模式:是否可以为实例使用单独的服务文件"app"?



我有一个 express/node 应用程序,我想使应用程序实例在多个文件中可用,而不会遇到循环引用(例如,在 express 中包含 routes 对象之前,您需要将应用程序对象导出到 routes.js 文件中,但然后将该 routes.js 文件导出回主应用程序.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

例如,这三个文件可能如下所示:

应用程序.js(主(

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

路线/路线.js

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

服务/应用程序.js

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

这是安全/最佳实践吗?

既然是module.exports.app = app,就不应该

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

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

它看起来不是很优雅,但它会起作用。

由于routes.js等应该按严格的顺序加载,以便中间件和路由正常工作,这种方法不会使它们松散耦合,也不会提供明显的好处。

一种常见的做法是做相反的事情,并在app.js中加载中间件。路由不需要app实例,如本指南中所述,它们可以使用路由器实例,然后挂载到入口点中的/

路线.js

const express = require('express');
const router = express.Router();
router.get('/', (req, res) => res.send('hello world'));
module.exports = router;

应用.js

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

相关内容

  • 没有找到相关文章

最新更新