当我执行从关联的Web应用程序访问Cloudant数据库的特定功能时,我在Node.js控制台窗口中收到以下错误:
"错误:您已超过当前查询类别"每秒5个请求的限制。
我在Chrome网络浏览器中收到了相应的错误:
" MethodHubFrontend-1.1.0.js:32 POST http://cognitivehub.w3ibm.mybluemix.net/api/export/archive 500(内部服务器错误)"。
我们的应用程序使用Cloudant Lite服务在Bluemix Dedicated(CIO)上运行。是什么导致了这些错误?是因为我们在Cloudant Lite中超过了每秒5个查询的吞吐量限制吗?
Cloudant Standard中是否有选项,而不是每秒提供50个查询的选项,我们可以使用?
我们应该如何处理Node.js服务器中的错误,以便返回3xx错误代码而不是500错误代码?
答案 0 :(得分:3)
导致这些错误的原因是什么?是因为我们在Cloudant Lite中超过了每秒5个查询的吞吐量限制吗?
是的,你是对的。您需要升级到标准计划以提高速率限制。有关详细信息,请查看Cloudant Web控制台中帐户选项卡中的详细信息。
Cloudant Standard中是否有选项,而不是每秒提供50个查询的选项,我们可以使用?
有几个级别,如帐户>中所列。 容量标签。
另外,我们应该如何处理Node.js服务器中的错误,以便返回3xx错误代码而不是500错误代码?
Cloudant应返回HTTP代码429(Too Many Requests)。您的应用可以通过两种方式响应此错误情况 - 失败或重新发送请求。
答案 1 :(得分:-1)
过去几天我遇到了同样的错误。这是我正在使用的代码。我认为这个问题与nodejs异步性质有关,而且没有正确使用回调,因此代码/请求可以同时异步发送,而不是异步发送。
错误:您已超出查询类
每秒5个请求的当前限制
我在向Cloudant Service提出的每个请求之间等待1秒等待时间。我觉得服务有问题。
// Used to add sleep time between calls to cloudant
var sleep = require('sleep');
const winston = require('winston')
var action_result = null
winston.level = 'debug';
var dbCredentials = {
dbName: 'testdb'
};
var feed = 1;
//Intialize DB for putting records in Cloudant.
dbCredentials.url = "https://replace with your URL-bluemix:replacewith your URL-bluemix.cloudant.com";
cloudant = require('cloudant')(dbCredentials.url);
// check if DB exists if not create a testdb database
cloudant.db.create(dbCredentials.dbName, function(err, data) {
winston.log("debug","create a test database Error:", err);
winston.log("debug","create a test database Data:", data);
});
dbnames = cloudant.db.use(dbCredentials.dbName);
winston.log("debug","Creating a record in database %s" , dbCredentials.dbName);
// Insert a one second timeout delay to not exceed 5 queries every 1 second in Cloudant API
winston.log("debug","Reproduce timeout error First SLEEP 5 minutes--------------- FIND Time is %d ", new Date().getTime() / 1000 );
sleep.sleep(1);
//Check if the asset action already exists.
dbnames.find({selector:{feed:feed }}, function(er, action_result) {
sleep.sleep(5);
if (er) {
winston.log("debug",'[db.find] Error Message %s', er.message);
throw er;
}
});
if ( action_result !== null) {
winston.log("debug",'Reproduce timeout error found results %d documents.', action_result.docs.length);
return action_result;
}else{
winston.log("debug",'Reproduce timeout error before loop');
for (var i = 0; i < 1000; i++) {
winston.log("debug","Reproduce timeout error SLEEP item %d --------------- FIND Time is %d " ,i, new Date().getTime() / 1000 );
sleep.sleep(1);
dbnames.insert(docData (i, new Date().getTime() / 1000), function(err, body, header) {
if (err) {
return winston.log("debug",'[db.insert] ', err.message);
}
winston.log("debug",'You have inserted the doc.');
expert_exists = false;
});
}; //End Loop
}; //End Else
function docData (number, timestring) {
var responseData = {
feed : number,
time : timestring,
};
return responseData;
}