我试图做这样的事情:
var query = 'select max(count) from ' + series +
' where value = \'' + search + '\'';
if (db.query(query, callback) !== undefined) {
return callback;
} else {
return callback = [{
name: series,
columns: ['time', 'max'],
points: [
[0, 0]
]
}];
}
我试图验证该查询是否未定义,或者搜索的元素是否存在于Influxdb中,然后设置回调就像元素存在一样,if语句有效,但是其他返回一个空数组
db参数是数据库配置的位置。
修改
感谢Osukaa的回答。我尝试你所采取的措施,但没有回应。以下是您的更改的完整功能:
var counter = function (config, callback) {
var count = 'select max(count) from ' + series + ' where value = \'' + search + '\'';
db.query(count, function (err, res) {
if(err) return err;
if(res.length == 0){
return [{
name: series,
columns: ['time', 'max'],
points: [
[0, 0]
]
}];
}else{
return res;
}
});
};
console.log显示一个空数组。
编辑2:
感谢@Osukaa,遗憾的是,无法正常工作,这是错误返回:
调试:处理程序,错误 {" msec":395.7593630000483,"错误":"无法找到系列:items.type.updated"} 调试:内部,错误 错误:无法找到系列:items.type.updated
编辑3:
我尝试创建一个系列时解决了这个问题。如果系列不存在,请显示此错误'错误无法找到系列[系列名称]',因此我将此代码放入错误代码中:
db.query(qCount, function(err, res) {
if (err) {
if (err == 'Error: Couldn\'t find series: ' + name.series) {
res = newSeries;
return callback(null, res);
} else {
return callback(err);
}
} else {
if (res.length !== 0) {
return callback(null, res);
} else {
res = newSeries;
return callback(null, res);
}
}
});
当错误等于“错误:无法找到系列:' + name.series,我传递值来创建它们。
感谢。
答案 0 :(得分:0)
异步代码不能像那样工作。 db.query
完成后,它将自动执行callback
代码。您没有必要执行return callback
。相反,你可以尝试这样的事情:
db.query('select max(count) from ' + series +
' where value = \'' + search + '\'' + ';', function (err, res) {
if(err) return err;
if(res.length == 0){
return [{
name: series,
columns: ['time', 'max'],
points: [
[0, 0]
]
}];
}else{
return res;
}
});
修改的
首先,让GET
获取计数
request.get('/itemCount')
.query({value: value.type})
.end(function(err, res) {
if (err) {
reply(err);
} else {
countElemnts(res.body[0].count);
}
});
所以服务器进入路由并执行处理程序:
server.route({
method: 'GET',
path: '/itemCount',
handler: function(request, reply) {
events.selectCount({
series: 'value.type',
search: request.url.query.value
}, function onSuccess(err, data) {
if (err) {
reply(err);
} else {
var result = {};
if (data.length !== 0) {
result = data[0].points.map(function(element) {
return {
count: element[1] + 1
};
});
reply(null, result);
} else {
reply(null, data);
}
}
});
}
});
它自己调用selectCount
函数来获取数字(我更新了callback
以返回(null,res)
)
var selectCount = function(config, callback) {
var qCount = 'select max(count) from ' + config.series +
' where itemType = \'' + config.search + '\'';
db.query(qCount, function(err, res) {
if (err) {
return callback(err);
}else{
if (res !== undefined) {
return callback(null,res[0]);
}else{
var res = [{
name: config.series,
columns: ['time', 'count'],
points: [
[0, 0]
]
}];
return callback(null,res);
}
}
});
};
当回调结束时,它应该执行countElements
:
var countElemnts = function(count) {
superagent
.post(config.eventsApiUrl)
.type('json')
.send({
name: 'items.type.updated',
data: {
id: request.params.id,
itemType: item.itemType,
count: count
}
})
.end(function() {
reply({
message: 'Item actualizado'
});
});
};