2014-11-30 6 views
2

노드 서버와 함께 간단한 backbone.js 응용 프로그램을 만들고 백엔드로 mongodb를 작성하려면이 책의 내용을 addyosmani - backbone-fundamentals에 따라야합니다.mongoose를 사용하여 mongoDB에 연결할 수 없습니다.

지시대로 최신 버전의 Node.js를 nodejs.org에서 설치하고 mongodb을 www.mongodb.org에서 설치하고 mongodb를 instructions에 따라 실행했습니다.

{ 
    "name": "backbone-library", 
    "version": "0.0.1", 
    "description": "A simple library application using Backbone", 
    "dependencies": { 
     "express": "~3.1.0", 
     "path": "~0.4.9", 
     "mongoose": "~3.5.5", 
     "body-parser": "~1.9.1" 
    } 
} 

tutorial then suggests to는 MongoDB를 연결하기위한 server.js 파일에 다음을 추가합니다 : 나는 다음 행과 혼동있어

//Connect to database 
mongoose.connect('mongodb://localhost/library_database'); 

//Schemas 
var Book = new mongoose.Schema({ 
    title: String, 
    author: String, 
    releaseDate: Date 
}); 

//Models 
var BookModel = mongoose.model('Book', Book); 

다음과 같이


package.json은 다음과 같습니다

mongoose.connect('mongodb://localhost/library_database'); 

이 책은 library_database라는 이름의 데이터베이스를 생성에 관한 어떤 것도 언급하지 않고 내가 수동으로 생성하지 않았기 때문에 - 나는 server.js에서 다음을 실행 정지하는 경우 :

mongoose.createConnection('mongodb://localhost/library_database'); 

var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 
// we wait till mongo is ready before letting the http handler query users: 
db.once('open', function() { 
    console.log('Running'); 
    //Schemas 
    var Book = new mongoose.Schema({ 
     title: String, 
     author: String, 
     releaseDate: Date 
    }); 

    //Models 
    var BookModel = mongoose.model('Book', Book); 
}); 

Running를 기록 ..! (내가 어떤 library_database를 작성하지 않았기 때문에 오는 방법 ...?)

하지만, 더 아래 그림과 같이 GET 요청 핸들러를 추가하여 책을 따르십시오 :

//Get a list of all books 
app.get('/api/books', function(request, response) { 
    return BookModel.find(function(err, books) { 
     if(!err) { 
      return response.send(books); 
     } else { 
      return console.log(err); 
     } 
    }); 
}); 

을하고 그것을 명중 다음 요청 :

:

jQuery.get('/api/books/', function(data, textStatus, jqXHR) { 
    console.log('Get response:'); 
    console.dir(data); 
    console.log(textStatus); 
    console.dir(jqXHR); 
}); 

튜토리얼에 따르면 내가 대신 나는 다음과 같은 오류가 발생, 로그를 볼 생각 해요

DB는 현재 기본 데이터베이스 "test"로 기본 포트를 수신 대기 중입니다.

mongo 셸에서 use library_database을 시도했지만 여전히 노드 서버에서 동일한 응답을 받았습니다.

응용 프로그램의 db를 수동으로 만들어야합니까? 그렇다면 앱의 인스턴스를 만들고 노드 서버에서 연결하는 방법은 무엇입니까?

또는 mongoose가 응용 프로그램 루트 폴더에 해당 db를 자동으로 만듭니다 (매우 희박합니다) ..?

나는 약간의 기본 개념이 누락되었을 수 있으므로 node.js, mongodb, mongoose 등으로 상당히 익숙하다. 나는 무엇을 놓치고 ..?

답변

0

1) 명시 적으로 데이터베이스를 만들 필요가 없습니다. 데이터베이스가 존재하지 않으면 MongoDB는 첫 번째 레코드가 컬렉션에 삽입 될 때 자동으로 데이터베이스를 생성합니다.

2) 나는 몽고 셸을 통해 컬렉션에 몇 권의 책을 삽입하거나 코드에서 부트 스트랩해야한다고 생각합니다. 멀리 있어야합니다.콜렉션에 아직 책이 없기 때문에 당신이 얻고있는 빈 응답은 내 생각에 당신이 null을 보내는 것입니다 : return response.send (books);

1

난 그냥 워드 프로세서에 connectcreateConnection에 대한 예제를 발견

다음
mongoose.connect('mongodb://user:[email protected]:port/database'); 
//-----------------------------------------------^ 

자습서의 하나가 될 때 : 그것은 포트 번호가 누락

mongoose.connect('mongodb://localhost/library_database'); 

. 기본 포트 번호를 다음과 같이 변경하여 변경했습니다.

mongoose.createConnection('mongodb://localhost:27017/library_database'); 

이제 응답이 표시됩니다.

+1

포트 번호에서이 정보가 도움이 찾을 수 있습니다 3.0 이상이 포트에는 추가되지 후했다. 잘 잡으세요! – webblover

0

이것은 내가 연결 한 방법입니다.

var mongoose = require('mongoose/'); 
var db = mongoose.connect('mongodb://localhost/newdbcoll'); 


//e.g. mongodb://username:[email protected]:10059/somecollection 
//mongoose_auth: 'mongodb://admin:[email protected]:27017/chrome-server' 

그리고 연결할 수 있습니다.

+0

여기에 'newdbcoll'db가 mongodb에 없으면 같은 이름의 새 db가 생성되거나 오류가 발생합니까? –

+0

@RahulSharma 어떤 유형이나 오류도 발생시키지 않습니다. 콜렉션에 문서를 삽입하면 DB가 생성됩니다. –

1

당신은 같은 특정 MongoDB의 버전이 필요합니다 mongoose documentation

Important! If you opened a separate connection using mongoose.createConnection() but attempt to access the model through mongoose.model('ModelName') it will not work as expected since it is not hooked up to an active db connection. In this case access your model through the connection you created:

var conn = mongoose.createConnection('your connection string') , MyModel = conn.model('ModelName', schema) , m = new MyModel; m.save(); // works vs

var conn = mongoose.createConnection('your connection string') , MyModel = mongoose.model('ModelName', schema) , m = new MyModel; m.save(); // does not work b/c the default connection object was never connected

관련 문제