我有这条路径查询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;
}
......
答案 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我会检查出来。如果没有,则可能还有其他事情发生 - 可能数据没有从数据库中一致地获取,或者在获取和呈现之间存在竞争条件。