我从the Mongoose website开始阅读快速入门,我几乎复制了代码,但我无法使用Node.js连接MongoDB。
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
exports.test = function(req, res) {
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
console.log("h1");
db.once('open', function callback () {
console.log("h");
});
res.render('test');
};
这是我的代码。控制台仅打印h1
,而不是h
。我哪里错了?
答案 0 :(得分:21)
当您致电mongoose.connect
时,它将与数据库建立连接。
但是,您在稍后的某个时间点(处理请求时)附加open
的事件侦听器,这意味着该连接可能已处于活动状态并且open
事件已经存在被叫(你还没听完)。
您应重新安排代码,以便事件处理程序尽可能接近(及时)连接调用:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
console.log("h");
});
exports.test = function(req,res) {
res.render('test');
};
答案 1 :(得分:11)
最安全的方法是“监听连接事件”。这样,您无需关心DB为您提供连接所需的时间。
完成后 - 您应该启动服务器。另外.. config.MONGOOSE在您的应用中公开,因此您只有一个数据库连接。
如果你想使用mongoose的连接,只需要在你的模块中配置config,然后调用config.Mongoose。希望这有助于某人!
这是代码。
var mongoURI;
mongoose.connection.on("open", function(ref) {
console.log("Connected to mongo server.");
return start_up();
});
mongoose.connection.on("error", function(err) {
console.log("Could not connect to mongo server!");
return console.log(err);
});
mongoURI = "mongodb://localhost/dbanme";
config.MONGOOSE = mongoose.connect(mongoURI);
答案 2 :(得分:2)
我弹出了同样的错误。然后我发现我没有运行mongod并且正在监听连接。要做到这一点,你只需要打开另一个命令提示符(cmd)并运行mongod
答案 3 :(得分:0)
自4.11.0起,不推荐使用Mongoose的默认连接逻辑。建议使用新的连接逻辑:
以下是npm模块的示例: mongoose-connect-db
// Connection options
const defaultOptions = {
// Use native promises (in driver)
promiseLibrary: global.Promise,
useMongoClient: true,
// Write concern (Journal Acknowledged)
w: 1,
j: true
};
function connect (mongoose, dbURI, options = {}) {
// Merge options with defaults
const driverOptions = Object.assign(defaultOptions, options);
// Use Promise from options (mongoose)
mongoose.Promise = driverOptions.promiseLibrary;
// Connect
mongoose.connect(dbURI, driverOptions);
// If the Node process ends, close the Mongoose connection
process.on('SIGINT', () => {
mongoose.connection.close(() => {
process.exit(0);
});
});
return mongoose.connection;
}
答案 4 :(得分:0)
建立连接的一种简单方法:
import mongoose from 'mongoose'
mongoose.connect(<connection string>);
mongoose.Promise = global.Promise;
mongoose.connection.on("error", error => {
console.log('Problem connection to the database'+error);
});