2017-11-13 1 views
-2

Node.js와 MongoDB를 사용하여 shortenUrl API를 작성했습니다.nodej에서 두 개의 mongodb 쿼리를 동시에 작동시킬 수 있습니까?

나는 증가하는 ID를 저장하기 위해 콜렉션을 사용하고 있습니다.

서버는 항상 최신 numberID에 대한 database,

  • 요청합니다

    • 사용자가 단축 URL을 요청 할 때마다, 그 다음 base62 변환을한다.

      그러나 Nodejs의 비동기 기능 때문에 증가하는 ID를 얻고 새 URL 쌍을 삽입하는 완료 시간은 확실하지 않습니다. 때때로 서버는 ID가 증가하지 않고 URL 쌍을 삽입합니다.

      app.post("/" , function(req , res) { 
            const curLongUrl = req.body.longUrl; 
            const data = { 
             longUrl : curLongUrl, 
             shortUrl : "" 
            }; 
          const IDurl = "https://shortenurl-rustyblade.c9users.io/"; 
      
           mongo.connect(url , function(err , db) { 
           if(err) { 
            return console.log(err); 
           } 
      
           const increment = db.collection("autoIncrement"); 
           increment.findOne({"function" : "incrementKey"} , function(err , docs) { 
            if(err) { 
             return console.log(err); 
            } 
            const curID = docs.increment; 
            console.log(curID); 
            const curShortUrl = IDurl + curID; 
            data.shortUrl = curShortUrl; 
            db.close(); 
           }); 
          }); 
      
      
          mongo.connect(url , function(err , db) { 
           if(err) { 
            return console.log(err); 
           }  
           const col = db.collection("urlTable"); 
           col.insert(data , function(err , document) { 
            if(err) { 
             return console.log(err); 
            } 
            console.log(JSON.stringify(data)); 
            db.close(); 
            res.send(JSON.stringify(data)); 
           }); 
          }); 
          //res.send(JSON.stringify(data)); 
      }); 
      
  • +0

    문서를 읽고 비동기 성 노드를 검색하십시오.이 유형의 질문은 .check async method and promises를 참조하십시오. 코딩을 시작하기 전에 먼저 이것을 보게 될 것입니다. –

    답변

    0

    그것은처럼 보인다 :

    yourAPI("/", function() { 
        // ... 
    
        increment(function() { 
         // ... 
    
         // if increase success 
    
         urlTableInsert(..., function() { 
          // ... 
    
          // if insert success 
          db.close(); 
          res.send(JSON.stringify(data)); 
         }) 
        }) 
    }) 
    

    그리고 당신은 약속, 공동 사용할 수 있습니다 또는 비동기 /는 콜백 지옥의 문제를 해결하기 위해 등을 기다리고 있습니다.

    관련 문제