NodeJS查询 - for循环等

时间:2014-04-28 11:27:02

标签: node.js express

所以我对nodejs相当新,我有以下函数Common.validRequest,它将在执行以下操作的每个请求上运行:

1)检查数组是否有请求api路由,即' / user / login'查找该路由的数组(Common.apiDoc())并返回该路由的请求主体应该在数组中的字段。

{name: 'user', required: true, description: 'Users login ID', minLength: 5, maxLength: 7},
{name: 'password', required: true, description: 'Users login password', minLength: 7, maxLength: 100}

2)对于阵列中的每个字段,如果他们需要'在字段上设置为true检查请求是否在正文中包含该字段,如果它不返回false。 (false将返回缺少的字段错误)

所以问题是我做错了吗?

Common.validRequest = function (actionUrl, body) {
    var fields = Common.apiDoc(actionUrl).fields;
    if (!fields) { return true; }   
    for(field in fields) {
        if (fields[field].required) {
            if (!body[fields[field].name]) return false;
        }   
    }   
    return true;
};
// get documentation for specified api action
Common.apiDoc = function (actionUrl) {  
    for(apiAction in Common.apiMethods) {   
        if (Common.apiMethods[apiAction].url == actionUrl) {
            var doc = Common.apiMethods[apiAction];
            return doc;     
        }
    }   
};

1 个答案:

答案 0 :(得分:2)

在NodeJS中,'阻塞for - 循环'不一定是坏的。

关注它是正确的。 NodeJS是单线程的,因此任何处理都会阻止其他处理(不使用工作线程,Web工作人员等)。但是,如果特定事件的处理很小,V8编译器和快速处理器将处理如此快速的事情,看起来它发生得很快(如实时)。

但是,您需要在某个时间处理该数据。您可以随时使用异步处理来分解for - 循环,并将内容分散到更小的块中。 (关于async库的评论是一个很好的起点。)一些传统观点是“在你不得不进行优化之前不要优化”。让事情先行,并正常工作,然后看看你能否做得更好。至少你会有一个基准(时间和成功!)

您拥有的for - 循环将包含少量字段。一个10元素循环不会杀死你的应用程序。递归地计算斐波纳契序列,可能:)分解你知道很大的大块,但是你可以花很多时间分解所有,这会使你实际上没有某事< / em>的。从它的声音来看,你的方法正在做你想要的,一般来说每个方法的处理都很小,所以你走在正确的轨道上。