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
会首先被需要; 任何性能影响都可以忽略不计。