express.Router()并要求在Express.js中

我正在按照Express 4.x新的express.Router()方法来组织我的项目。

正如Express的文档所描述的那样,

路由器对象是中间件和路由的独立实例。 你可以把它看作是一个只能执行中间件和路由function的“小应用程序”。

为了更好的理解,我们来考虑一下这个项目结构:

 project/ index.js routes/ myRouter.js ... ... 

和文件本身:

index.js

 const express = require('express'); const app = express(); const path = require('path'); const myModule = require('myModule'); app.use('/myRouter', require('routes/myRouter')); // some more code using myModule set of functions 

路线/ myRouter.js

 const express = require('express'); const path = require('path'); const router = express.Router(); const myModule = require('myModule'); router.get('/', function(req, res){ // some more code using myModule set of functions }); module.exports = router; 

正如你所看到的,这两个文件都需要使用myModule的函数,所以AFAIK这两个文件都需要myModule

Express如何处理这种情况?

正如我所看到的,Express直接通过module.exports的代码导入到index.js 。 如果是这样,引擎是以某种方式预编译它的? 那么是不是myRouters' requires多余?

如果不是,它会如何影响性能? 我应该避免路由器为我的任务?

首先是没有被编译,不是es6。 第二个app.js导入模块并为你的路由运行该模块,这样你的myRouter.js中的导入是完全必要的。 这篇文章肯定会帮助你理解模块。 还有一件事是它确实降低了您的应用程序性能。 Express用于node.js,node.js导入使用V8引擎进行优化。 所以不要担心性能。

Express如何处理这种情况?

Express不,Node。 从文档

模块在第一次加载后被caching。 这意味着(除其他外)每个调用require('foo')将返回完全相同的对象,如果它将parsing为相同的文件。

多次调用require('foo')可能不会导致模块代码被多次执行。 这是一个重要的function….

因此考虑到你的应用程序, myModule在路由器加载的时候已经被caching了,因为app.js会首先被需要; 任何性能影响都可以忽略不计。