node.js - Express/Node 依赖项的模式 : Can I use a separate services file for "app" instance?

标签 node.js express require dependency-management circular-dependency

我有一个express/node应用程序,我想让应用程序实例在多个文件中可用,而不会遇到循环引用(例如,在express包含routes对象之前,您需要将app对象导出到routes.js文件中,但随后该routes.js文件会导出回主app.js文件中)。

虽然我知道路由对象可以解决这个用例,但我正在尝试找出不同的模式是否可行/是否是最佳实践。

SO...我可以有一个单独的服务文件,我需要在该服务文件中快速创建应用程序吗?并让我的主根文件夹以及其他 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/routes.js

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

services/app.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 实例,如 this guide 中所述。他们可以使用路由器实例,然后挂载到入口点中的 /:

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'));

关于node.js - Express/Node 依赖项的模式 : Can I use a separate services file for "app" instance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51171008/

相关文章:

node.js - 使用 Node.js 通过堆栈和跨 thrift 服务边界携带请求上下文

javascript - 返回 Node.js 函数的值

javascript - 使用 Angular 验证表行中的输入

node.js - 限制对 admin-sdk 的 firestore 访问

javascript - Node.js 文档未定义

javascript - 无法从下载的 blob 中读取 ulatedStreamBody

node.js - 登录一个 Express 应用程序会破坏其他应用程序(同一服务器)中的 session

node.js - 蒙哥错误: server instance in invalid state undefined

node.js - CoffeeScript 传递 require() 参数错误

javascript - Protractor 测试中的 request-promise + co API 触发器