小编pil*_*guy的帖子

Node.js,改进和正确的路由

我仍然围绕着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文件夹结构,所以代码比上面的要复杂一点.但你明白了.

我想知道其中任何一个的后果是什么,以及它是否真的重要?

谢谢!

model-view-controller node.js express restify

8
推荐指数
2
解决办法
9642
查看次数

在Mustache PHP中访问迭代字段的值

假设我在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,我想使用此方法迭代值...

谢谢!

php arrays templates mustache

6
推荐指数
2
解决办法
7197
查看次数

Nodejs app结构

我想知道我是否正在构建我的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.我也不认为这是一个问题,同样的逻辑,对象作为一个指针返回到相同的内存空间,所以我不会加倍内存使用或任何东西.

是否有更好/更简单的方法来构建它?

javascript node.js express restify

5
推荐指数
1
解决办法
1313
查看次数