繁体   English   中英

express.Router(),并且在Express.js中需要

[英]express.Router() and requires in Express.js

我正在尝试根据Express 4.x新的express.Router()方法组织项目。

正如Express的文档中所述,

路由器对象是中间件和路由的隔离实例。 您可以将其视为“微型应用程序”,仅能够执行中间件和路由功能。

为了更好地理解,让我们考虑以下项目结构:

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直接将myRouter的代码导入index.js 如果是这样,引擎会以某种方式进行预编译吗? 然后myRouters' requires冗余?

如果不是,它将如何影响性能? 我应该避免使用路由器吗?

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

Express如何处理这种情况?

Express不能,Node可以。 来自文档

第一次加载模块后将对其进行缓存。 这意味着(除其他事项外)每次对require('foo')的调用都将返回完全相同的对象,如果它可以解析为相同的文件。

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

因此,考虑到您的应用程序,在路由器首先将myModule加载为app.js时已经myModule进行了缓存; 对性能的影响可以忽略不计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM