【问题标题】:Http Route called multiple times多次调用 Http Route
【发布时间】:2012-03-11 02:42:55
【问题描述】:

下面的路由在express中调用时,实际上执行了6次。 console.log 打印了 6 次,我的 mongoose 逻辑执行了 6 次(在数据库中节省了 6 次)。

然后我从 cloud9ide “无法代理请求”返回一个 http 500。我真的很困惑,我的代码中没有循环,这怎么会发生? console.log("在 else (2)");打印 6 次。

编辑:我已经尝试了注释掉各个部分的 mongooseLogic 代码,但问题仍然存在。这看起来不是猫鼬问题。

第二次编辑:我已将帖子更改为 get 并对要发送的正文进行硬编码,并且该路由仅执行一次。

第三次编辑:我还使用everyauth 与facebook oauth 进行会话/身份验证。

app.post("/result/:userId/:elementId", function(req, res) {
  var receivedJSON = req.body;    

  console.log("In route");

  //Making sure the receive request is valid
  if(typeof(receivedJSON.type) !== undefined) {
    mongooseLogic.saveResults(req.params.elementId, receivedJSON, req.params.userId, function(message) {
      if(message === "Success") {
        res.json({ success: true,  message: 'Result saved.'});    
      }
      else {
        res.json({ success: false,  message: 'Error in saving results. Trace: ' + message});
      }
    });
  }
  else {
    res.json({ success: false,  message: 'Failed, Invalid object sent to server'});   
  }
});

mongooseLogic 文件上的代码:

var saveResults = function(elementRefId, receivedResult, userId, callback){

    if(elementRefId.toString().length !== 24 ){
       callback("Invalid objectId for elementId");
    }
    else{
            Result.findOne({ "id" : userId, "serieResult.id": elementRefId }, function(err, result){
                if(err){
                    callback("No Document found: " + err);
                }
                else if( result === null){
                    console.log("in null");
                    var tempResult =  {
                        id           : elementRefId, 
                        unit         : receivedResult.unit, 
                        value        : receivedResult.value 
                    }
                    Result.update({ "id" : userId}, { $push: {"serieResult": tempResult}}, {upsert: true}, function(err){
                        if(err){
                            callback("Error in saving result (Distance): " + err);
                        }
                        else{
                            callback("Success");
                        }
                    });
                }
                else{            
                    Result.update({ "id" : userId, "serieResult.id": elementRefId },
                        { $set:{
                            "serieResult.$.unit"        : receivedResult.unit,
                            "serieResult.$.value"       : receivedResult.value,
                        },{upsert: true}, function(err){
                            if(err){
                                callback("Cant update doc: " + err);
                            }
                            else{
                                console.log("in else (2)");
                                 callback("Success");
                            }
                    }); 
                }
            }); 
        }
    }
}

【问题讨论】:

  • 您的客户端代码如何调用这个?你能用 cURL 重现这个吗?
  • 它是一个 ajax (jquery get json) 它只被调用一次,因为我已经在 google chrome 开发者工具中检查了查询。
  • 您可以将您的用户名/项目名称通过电子邮件发送到 support@c9.io,以便我们帮助您调试吗?

标签: node.js express mongoose cloud9-ide everyauth


【解决方案1】:

这是干扰的 Cloud9 代理的问题。由于此问题,问题已得到解决并已解决。

【讨论】:

  • 感谢您和 cloud9ide 的转身。
猜你喜欢
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多