express 和 leancloud 的 node SDK,访问/list的时候有时候有json返回有时候没有。查询单个数据也是一样,有时候就没有数据返回。

本地和us节点的部署都是这个状况,没有error,就是空的record,百思不得其解。

router.get('/list', function(req, res, next) {
  // list all lic records of licurl generating
  RecordsQuery.equalTo('licurl', 'Generating');
  RecordsQuery.find({
    success: function(records) {
      res.json(records);
    },
    error: function(error) {
      console.log('Error: ' + error.code + ' ' + error.message);
      res.json(error);
    }
  });
});

原来RecordsQuery是本地对象,每次查找都得重新new个实例,不然会冲突?文档里又不是很清楚,光看用法以为是全局的,查询find()过后自动清空条件(equalTo)那种。

router.get('/list', function(req, res, next) {
  var RecordsQuery = new AV.Query('Records');
  // list all lic records of licurl generating
  RecordsQuery.equalTo('licurl', 'Generating');
  RecordsQuery.find({
    success: function(records) {
      res.json(records);
    },
    error: function(error) {
      console.log('Error: ' + error.code + ' ' + error.message);
      res.json(error);
    }
  });
});

router.post('/update', function(req, res, next) {
  var RecordsQuery = new AV.Query('Records');
  // var pid = req.params.pid;
  var pid = req.body.pid.toString();
  var licurl = req.body.licurl.toString();

  RecordsQuery.equalTo('pid', pid);
  RecordsQuery.first({
    success: function(record) {
      record.set('licurl', licurl);
      record.save();
      res.send('Update licurl success!');
    },
    error: function(error) {
      console.log('Error: ' + error.code + ' ' + error.message);
      res.send('Error: ' + error.code + ' ' + error.message);
    }
  })
});

是每个路由只要涉及到查询都要重新new query吗?

是的,如果你不 new query 的话,拿之前的 RecordsQuery 对象再次调用 equal(),就是相当于并列地,添加了新的查询条件。然后可能造成查询结果为空。