0

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

现在问题来了:我可以为这个特定的路线/项目加载页面 20 次......其中 19 次它会完美运行,但随机它会抛出一个错误:

TypeError: Cannot read property 'creator' of null

这个错误指出了这条线:withif(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;
                }


                ......
4

1 回答 1

0

我是superagent的贡献者之一。

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

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

var app = express();

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

app.listen(3000);

如果 20 次仍然为 null 1,请作为问题提交,我会检查出来。如果不是,那么很可能发生了其他事情 - 可能没有从数据库中始终如一地获取数据,或者在获取和渲染之间存在竞争条件。

于 2013-01-09T05:39:33.000 回答