猫鼬连接

时间:2013-12-03 20:02:02

标签: node.js mongodb mongoose

我从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。我哪里错了?

5 个答案:

答案 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的默认连接逻辑。建议使用新的连接逻辑:

  • useMongoClient选项
  • 原生承诺库

以下是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);
});