Node.js 检查某个查询是否未定义,并在这种情况下定义回调
我正在尝试这样做:Node.js 检查某个查询是否未定义,并在这种情况下定义回调,node.js,influxdb,Node.js,Influxdb,我正在尝试这样做: 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
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]
]
}];
}
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;
}
});
我试图验证该查询是否未定义,或者所搜索的元素在influxdb中是否不存在,然后配置回调,就像元素存在一样,if语句有效,else返回空数组
db参数是数据库配置的位置
编辑:
谢谢你的回答。我尝试你的建议,但没有反应。以下是您所做更改的完整功能:
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:
当我尝试创建一个系列时,我已经解决了这个问题。当序列不存在时,显示此错误“错误无法找到序列[series name]”,因此我将此代码放入错误代码中:
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);
}
}
});
当错误等于“error:找不到series:”+name.series时,我传递值以创建它们
谢谢。异步代码不是这样工作的。当
db.query
完成时,它将自动执行回调
代码。您不必执行返回回调
。相反,您可以尝试以下方法:
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]
]
}];
}
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
函数来获取号码(我更新了回调
以返回(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'
});
});
};
现在,如果序列不存在,请告诉我错误,但不要创建de序列。会发生什么?这是错误:{“msec”:30.899682998657227,“错误”:“找不到series:series.updated”}您的console.log在哪里没有显示任何内容?类似于
console.log(counter)
?我解决了这个问题,现在是如果序列不存在,则会给我错误,但不创建序列。这里有一个指向google groups的链接,其中有我使用的完整代码:@diego可能是您没有返回selectCount
回调,而callback(null,res)
。我用你的完整代码更新了我的答案。谢谢你的回复,不幸的是在第一篇文章中是错误给了我。