所以我对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;
}
}
};
答案 0 :(得分:2)
在NodeJS中,'阻塞for
- 循环'不一定是坏的。
关注它是正确的。 NodeJS是单线程的,因此任何处理都会阻止其他处理(不使用工作线程,Web工作人员等)。但是,如果特定事件的处理很小,V8编译器和快速处理器将处理如此快速的事情,看起来它发生得很快(如实时)。
但是,您需要在某个时间处理该数据。您可以随时使用异步处理来分解for
- 循环,并将内容分散到更小的块中。 (关于async
库的评论是一个很好的起点。)一些传统观点是“在你不得不进行优化之前不要优化”。让事情先行,并正常工作,然后看看你能否做得更好。至少你会有一个基准(时间和成功!)
您拥有的for
- 循环将包含少量字段。一个10元素循环不会杀死你的应用程序。递归地计算斐波纳契序列,可能:)分解你知道很大的大块,但是你可以花很多时间分解所有,这会使你实际上没有某事< / em>的。从它的声音来看,你的方法正在做你想要的,一般来说每个方法的处理都很小,所以你走在正确的轨道上。