猫鼬连接

CSn*_*erd 17 mongoose mongodb node.js

我从Mongoose网站上快速入手,我几乎复制了代码,但我无法使用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');
};
Run Code Online (Sandbox Code Playgroud)

这是我的代码.控制台只打印h1,而不是h.我哪里错了?

rob*_*lep 23

当您致电时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');
};
Run Code Online (Sandbox Code Playgroud)


fin*_*ino 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);
Run Code Online (Sandbox Code Playgroud)