Nodejs应用程序结构

我想知道是否我正在构build我的nodejs应用程序来说明最佳性能。 我主要关心的是如何通过模块移动我的应用程序参考。

基本上在我的app.js文件中,我声明了我所有的需求,库等:

var app = { config : require('../../config.json'), restify : require('restify'), path : require('path'), mongo : require('mongodb'), model : require('./models.js'), step : require('step'), q : require('q'), api : require('./api_util.js'), underscore : require('underscore') }; 

在我的导出中,我传递了整个应用程序对象。 现在,我已经了解了JavaScript的知识(如果我错了,可以纠正我),这不会创build对象的新实例,它只是将对象作为指针传入并引用内存中的同一个对象。

现在我发现自己在这方面做的(放松)是在我的restify库中(同样可以用Express来完成),我将app值附加到服务器请求对象,如下所示:

 app.server.pre(function (request, response, next) { request.app = app; return next(); }); 

因此,如果我需要快速访问我的任何库声明,configuration等每一个请求,我可以很容易地访问request.app。 我也没有看到这是一个问题,同样的逻辑对象作用指针回到同一个内存空间,所以我没有加倍的内存使用量或任何东西。

有没有更好/更简单的方法来构build这个?

对于传递的引用而不是被复制的对象,你是正确的。 从这个angular度来看,在传递对app引用时,不会浪费额外的空间。

但是,我build议你不要这样做:如果你在任何地方都传递给app的参考,它告诉我的是,你不知道你在这个或那个模块中需要什么。

您应该仔细计划您的依赖关系,并知道每个模块将需要什么,以便您可以传递应用程序中每个模块的正确依赖关系。

关于underscoremongodb这样的事情,你不应该做你正在做的事情。 你应该只传递需要初始化的模块。 对于像underscore或者mongodb这样的东西,node.js在你第一次require()时候caching这个定义,所以你可以在需要它的每个模块的顶部调用require

这不会导致任何性能损失,并且会使每个模块所需的库变得更加清晰。