javascript - 在 nodeJs 中使用 require 的最佳方法
问题描述
我需要知道开发人员在 nodeJS 开发中用于包含模块的这两种方法之间的区别。
- 第一种方法(通过将模块导入应用程序并通过作为参数传递或将其作为属性绑定到应用程序来使用它)
Server.js(应用入口点)
let app = require('express').express();
let Router = require("./routes");
let SomeModule = require("./some-module");
.....
.....
Router.mountAPI("/api", app, SomeModule);
.....
....
routes.js(将预先导入的模块传递给不同文件中的控制器)
let Ctrl1fun = require("./ctrl1");
let Ctrl2fun = require("./ctrl2");
exports.mountAPI = function(mount, app, SomeModuleToUseInController) {
app.use(mount + '/endpoint1', Ctrl1fun(SomeModuleToUseInController));
app.use(mount + '/endpoint2', Ctrl2fun(SomeModuleToUseInController));
};
ctrl1.js(端点 1 的控制器)
module.exports = function(SomeModule) {
....
....
//using SomeModule
}
// This file may contain some other controller function for simplicity i took only one
ctrl2.js(端点 2 的控制器)
module.exports = function(SomeModule) {
....
....
//using SomeModule
}
// This file may contain some other controller function for simplicity i took only one
2.第二种方法(每个控制器导入模块)
Server.js(应用入口点)
let app = require('express').express();
let Router = require("./routes");
.....
.....
Router.mountAPI("/api", app);
.....
....
routes.js(在控制器中导入的模块)
let Ctrl1fun = require("./ctrl1");
let Ctrl2fun = require("./ctrl2");
exports.mountAPI = function(mount, app) {
app.use(mount + '/endpoint1', Ctrl1fun());
app.use(mount + '/endpoint2', Ctrl2fun());
};
ctrl1.js(端点 1 的控制器)
let SomeModule = require("./some-module");
module.exports = function() {
....
....
//using SomeModule
}
// This file may contain some other controller function for simplicity i took only one
ctrl2.js(端点 2 的控制器)
let SomeModule = require("./some-module");
module.exports = function() {
....
....
//using SomeModule
}
// This file may contain some other controller function for simplicity i took only one
如果我们考虑一下,女巫一号会更好
- 应用程序大小(API 和控制器功能在不同的控制器文件中)
- 应用性能
- 最佳实践
解决方案
尺寸和性能方面的差异可以忽略不计。
第二种方法更简单,我认为它是最好的方法,除非您需要将不同的模块注入到相同的控制器类型中,例如由模型类型参数化的通用 CRUD 控制器
推荐阅读
- android - recyclerview 上的错误 onclicklistener
- html - 在表格中,如果包含两个标签,那么可以将一个标签设为粗体吗?
- html - 响应式图像顶部的 Css 图像绝对位置
- php - Homebrew 升级后 MySQL 服务器消失了
- r - 直方图显示不正确
- bash - 使用容器内的 shell 文件设置系统 ENV
- php - 如何将 5 位数字与 preg match 完全匹配?
- node.js - 如何使用 typescript/NodeJS 构建 UI
- javascript - React - 用输入值填充状态数组
- php - 如何在收藏laravel中添加数字?