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)
。我用你的完整代码更新了我的答案。谢谢你的回复,不幸的是在第一篇文章中是错误给了我。