我仍然围绕着Node,但我有一个非常简单的问题.我看到很多节点示例,人们在一个app.js文件中声明他们的路由和所有逻辑(或者有时将它们分成子文件).
我的问题基本上是:最好是将所有路由声明保存在应用程序中,还是引导映射到文件结构的通用路由.这似乎是一个原始问题,但我的目标是掌握节点内最有效的东西.
我目前正在使用Restify构建一个API处理程序,但我有另一个使用Express的应用程序(因此这个问题可能会回答这两个问题).
在我的路线中,我可以声明一个单一的路线引导程序,如下所示:
app.all('/api/:package/:controller', function(request, response) {
var controller = require(
'../' + request.params.package + '/api/' + request.params.controller
);
controller.index(request, response);
response.end();
});
Run Code Online (Sandbox Code Playgroud)
这基本上接受来自API的所有调用,并以适当的api控制器为目标.或者,我可以单独声明每个路由,甚至可以编写一个遍历每个控制器的循环,并在init上声明它们.所以:
for (var i in packages.controllers) {
app.all('api/' + package + '/' + controllers[i].name, function(request, response) {
var controller = require(
'../' + request.params.package + '/api/' + request.params.controller
);
controller.index(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
packages.controllers是所有可能的控制器的数组.注意上面的代码不准确,我有一个HMVC文件夹结构,所以代码比上面的要复杂一点.但你明白了.
我想知道其中任何一个的后果是什么,以及它是否真的重要?
谢谢!
假设我在PHP中有一个看起来像这样的数组:
$values = Array(
'0' => 'value1',
'1' => 'value2',
'2' => 'value3'
)
Run Code Online (Sandbox Code Playgroud)
我想使用Mustache迭代数组,但我想要关联的值.这是我希望做的:
{{#values}}
{{the current value}}
{{/values}}
Run Code Online (Sandbox Code Playgroud)
我希望返回的结果是:
value1
value2
value3
Run Code Online (Sandbox Code Playgroud)
我通过将我的结构更改为:
$values = Array(
'0' => array('value=' =>'value1'),
'0' => array('value=' =>'value2'),
'0' => array('value=' =>'value3'),
)
Run Code Online (Sandbox Code Playgroud)
并在Mustache迭代器中调用{{valule}}.
我应该以完全不同的方式做这件事吗?我在PHP中使用SplFixedArray,我想使用此方法迭代值...
谢谢!
我想知道我是否正在构建我的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')
};
Run Code Online (Sandbox Code Playgroud)
在我的导出中,我传递了整个app对象.现在,鉴于我对JavaScript的了解(如果我错了,你可以纠正我),这不会创建对象的新实例,它只是将对象作为指针传入并在内存中引用相同的对象.
现在我发现自己除此之外(为了方便)在我的restify库中(可以用Express完成),我将app值附加到服务器请求对象,如下所示:
app.server.pre(function (request, response, next) {
request.app = app;
return next();
});
Run Code Online (Sandbox Code Playgroud)
因此,对于每一个请求,如果我需要快速访问我的任何库声明,配置等,我可以轻松访问request.app.我也不认为这是一个问题,同样的逻辑,对象作为一个指针返回到相同的内存空间,所以我不会加倍内存使用或任何东西.
是否有更好/更简单的方法来构建它?