【问题标题】:Best approach to use require in nodeJs在 nodeJs 中使用 require 的最佳方法
【发布时间】:2018-11-22 21:21:43
【问题描述】:

我需要知道开发人员在 nodeJS 开发中用于包含模块的这两种方法之间的区别。

  1. 第一种方法(通过将模块导入一次并通过作为参数传递或将其作为属性绑定到应用程序来在应用程序中传递模块)

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 

如果我们考虑一下,女巫一号会更好

  1. 应用程序大小(API 和控制器功能在不同的控制器文件中)
  2. 应用性能
  3. 最佳实践

【问题讨论】:

    标签: javascript node.js express dependency-injection node-modules


    【解决方案1】:

    大小和性能方面的差异可以忽略不计。

    第二种方法更简单,我认为它是最好的一种,除非您需要将不同的模块注入到相同的控制器类型中,例如由模型类型参数化的通用 CRUD 控制器

    【讨论】:

    • 嗨@Jonas,第二种方法比第一种方法占用更多内存空间吗?
    • 不,我不明白为什么会这样
    • 因为我们将同一个模块包含在不同的文件中,所以它不会通过多次包含它来扩展应用程序运行时的内存需求,或者它只会在模块上加载一次吗?跨度>
    • 不,节点模块缓存会保证每个模块只加载一次。
    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多