【问题标题】:NodeJS query - for loops etcNodeJS 查询 - for 循环等
【发布时间】:2015-09-09 16:02:46
【问题描述】:

所以我是 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;     
        }
    }   
};

【问题讨论】:

  • 尝试检查async库each函数。但我认为你的代码还可以。

标签: node.js express


【解决方案1】:

“阻塞for-loop”在 NodeJS 中不一定是坏事。

你担心它是正确的。 NodeJS 是单线程的,因此 any 处理会阻塞其他处理(不使用工作线程、Web 工作人员等)。但是,如果对特定事件的处理很小,V8 编译器和快速处理器会处理得非常快,看起来一切都发生得很快(比如实时)。

但是,您有时需要处理这些数据。你总是可以用异步处理分解你的for-loops,并将事情分散成更小的块。 (关于async 库的评论是一个很好的起点。)一些传统观点是“在必须优化之前不要优化”。先让事情运转起来,并且正常运转,然后看看你是否能让事情变得更好。至少你会有一个基准(时间和成功!)

您拥有的for-loops 将包含少量字段。 10 个元素的循环不会杀死您的应用程序。可能递归地计算斐波那契数列:) 分解你知道很大的大块,但是你可以花很多时间分解所有东西,这会延迟你真正拥有一些东西。从它的声音来看,您的方法正在做您想做的事情,并且通常每个方法的处理都很小,所以您走在正确的轨道上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多