2013-01-11 42 views
6

Tôi đã cố gắng để ngắt kết nối mongoose sau khi kết thúc công việc cơ sở dữ liệu, nhưng dường như nó đã không làm việcMongoose ngắt kết nối không hoạt động

var mongoose = require('mongoose'); 

mongoose.connect('mongodb://localhost:27017/myDatabase'); 

var MyModel = mongoose.model('MyModel', MySchema); 

//do something here 

mongoose.disconnect(); 

Thời gian tất cả mọi thứ đầu tiên hoạt động tốt, nhưng khi chạy các mã cho lần thứ hai, tôi nhận được lỗi "Đang cố gắng để mở kết nối không rõ ràng". Tôi cũng đã thử mongoose.connection.close(); và có cùng kết quả.

Có ai vui lòng giúp tôi với điều này không?

Cảm ơn bạn rất nhiều!

Gary

Tôi nghĩ rằng tôi đã hiểu điều này.

Trong mã của tôi, tôi đã cố gắng làm điều gì đó với mô hình của tôi với cơ sở dữ liệu:

var mongoose = require ('cầy mangut');

mongoose.connect('mongodb://localhost:27017/myDatabase'); 

var MyModel = mongoose.model('MyModel', MySchema); 

MyModel.findOne({}, function() {...}); 

mongoose.disconnect(); 

Xem sự cố? Do tính năng không chặn của Nodejs, "ngắt kết nối" đã được thực thi trước khi "findOne" được hoàn thành, do đó tất nhiên nó không hoạt động!

Giải pháp là để đưa ngắt kết nối vào hàm callback:

MyModel.findOne({}, function() { 
... 
mongoose.disconnect(); 
}); 
+3

Kể từ khi bạn đã tìm thấy giải pháp của bạn, bạn nên đăng Là câu trả lời dưới đây thay vì chỉnh sửa mô tả câu hỏi. – Stennie

+0

Trên thực tế, vì giải pháp này trông giống như nó đến từ câu trả lời của lancerex, bạn nên chấp nhận/upvote câu trả lời đó. –

+0

Gary, bạn nên đánh dấu một trong các câu trả lời là chính xác. – agm1984

Trả lời

3

thử như thế này:

var db = mongoose.connect('mongodb://localhost:27017/myDatabase'); 
MyModel.findOne({}, function() { 
    // todo 
    db.disconnect(); 
}); 
2
var db = mongoose.createConnection('mongodb://localhost:27017/myDatabase'); 

MyModel.findOne({}, function() { 

    // Processing to be done 

    db.close(); 
}); 
+0

Nói chung không được phép sử dụng câu trả lời để vượt qua yêu cầu đại diện tối thiểu cho các nhận xét. Tuy nhiên, trong trường hợp này tôi nghĩ rằng nó là hợp pháp để thêm này như là một câu trả lời, bởi vì * nếu * nó chính xác nó có thể là một phần cần thiết của giải pháp chưa được đăng. –

+0

Tuy nhiên, một điểm quan trọng cần làm rõ: Bạn nói "Tôi phải thêm trả lời", nhưng xin lưu ý rằng Stack Overflow có định dạng câu hỏi và trả lời, không phải là định dạng chuỗi thảo luận và "câu trả lời" không có nghĩa là " Đáp lại"; nó có nghĩa là bạn đang thực sự cung cấp một câu trả lời cho câu hỏi. Vui lòng đọc trang [Giới thiệu] để hiểu rõ hơn về định dạng của trang web. –

Các vấn đề liên quan