Node.js Superagent并未持续填充结果

时间:2013-01-09 03:31:04

标签: node.js express

我有这条路径查询API以获取有关项目的信息。它使用超级代理发布get请求,使用.set传递一些头文件,project_results应该包含数据。

现在问题是:我可以为这个特定的路线/项目加载20次页面... 19次它将完美地工作但是随机它会引发错误:

TypeError: Cannot read property 'creator' of null

此错误指出了行:if(project.creator == req.signedCookies.user_3rb._id) {

所以我知道它超越了:if(project_results.status == '200') {

因为我一遍又一遍地看同一个项目(我知道所有项目都有创建者,我检查了数据库)

我的问题是为什么有时它找不到project_results变量的这个属性?它非常不一致..我认为在完成代码之前完全填充了project_results ...因为它通过状态检查我们知道project_results变量中至少有一些数据..

app.get('/user/projects/:project_id', function(req, res, next) {
    var agent = superagent.agent();
  var project = {};

    project.id = req.params.project_id;

    agent
        .get(apihost + '/api/project/'+project.id)
        .set('api_key', apikey)
        .set('access_token', user.access_token)
        .end(function(project_error, project_results) {

            if (project_error) {
        console.log(project_error);
            }

            if(project_results.status == '200') { 

                project = JSON.parse(project_results.text);

                // Check if we are the owner of the project
                if(project.creator == req.signedCookies.user_3rb._id) { 
                    project.owner = true;
                }


                ......

1 个答案:

答案 0 :(得分:0)

我是超级contributors之一。

我建议隔离测试用例,而不是尝试直接在您的应用中调试。

一种简单的方法是创建一个非常短的快速应用程序,该应用程序始终返回对您尝试访问的路径的硬编码完美响应 - 然后查看project是否仍然是空的1次20次:

var app = express();

app.use(function(req, res, next) {
  res.send({
    // your data hardcoded here
  });
});

app.listen(3000);

如果它在20次中仍为1,那么请submit it as an issue我会检查出来。如果没有,则可能还有其他事情发生 - 可能数据没有从数据库中一致地获取,或者在获取和呈现之间存在竞争条件。