2013-08-13 13 views
0

안녕 오류 "OverwriteModelError을 : shortener 모델 번 컴파일을 덮어 쓸 수 없습니다."얻고있다 다음 스 니펫에서몽구스 덮어 모델

var mongoose = require('mongoose'); 
var http = require('http'); 
var server = http.createServer(function(httpRequest, httpResponse) { 

    var urls = httpRequest.url.split("/"); 
    var parts = []; 
    for(var i = 0; i < urls.length; i += 1) { 
     if(urls[i] === "") continue; 
     parts.push(urls[i]); 
    } 

    console.log(parts); 

    if(parts.length === 0) { 
     httpResponse.writeHead(400); 
     httpResponse.end(); 
    } 

    mongoose.connect("mongodb://localhost/shortener"); 

    var db  = mongoose.connection; 
    var now  = new Date(); 
    var shortener = {}; 

    db.on('error', console.error.bind(console, 'connection error:')); 
    db.once('open', function() { 

     var urlSchema = mongoose.Schema({ 
      slug: String, 
      url: String 
     }); 
     shortener = mongoose.model("shortener", urlSchema); 

     if(parts.length === 2) { 

      //This is a set 
      var shortUrl = new shortener({ 
       slug: now.getTime().toString(36), 
       url: decodeURIComponent(parts[1]) 
      }); 
      shortUrl.save(function(error, newUrl) { 
       httpResponse.writeHead(200, { 
        'Content-Type': 'application/json' 
       }); 
       httpResponse.end(httpRequest.hostname + newUrl.slug); 
      }); 

     } else if(parts.length === 1) { 

      //This is a get 
      shortener.find({ 
       slug: parts[0] 
      }, function(error, oldUrl) { 
       httpResponse.writeHead(302, { 
        'Location': oldUrl.url 
       }); 
      }); 

     } 
    }); 

    db.close(); 

}).listen(7000); 

답변

0

mongoose.model은 코드에서 한 번만 호출해야합니다. mongoose 코드를 createServer 콜백 외부에 배치 해보십시오. 요청은 서버에 도착할 때마다 호출되므로 모델을 다시 등록하려고 시도합니다.