Мне нужно знать разницу между этими двумя подходами, которые разработчик использует при разработке nodeJS для включения модуля.
- First approach (passing module in app by importing it once and using it by passing as parameter or binding it to app as property )
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.Second approach (Each controller importing the module)
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
Ведьма лучше, если мы рассмотрим



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Разница в размере и производительности будет незначительной.
Второй подход проще, и я считаю его лучшим, если вам не нужно вводить разные модули в один и тот же тип контроллера, например. общий контроллер CRUD, параметризованный типом модели
Нет, я не понимаю, почему
Поскольку мы включаем один и тот же модуль в разные файлы, разве это не увеличит требования к памяти во время выполнения приложения, включив его несколько раз, или он будет загружен в модуль только один раз?
Нет, кеш модуля узла гарантирует, что каждый модуль будет загружен только один раз.
Понятно, спасибо @Jonas fredkschott.com/post/2014/06/require-and-the-module-system
Привет @Jonas! Второй подход требует больше памяти, чем первый?