Express.js无法连接到mongodb

时间:2017-04-15 11:14:56

标签: javascript node.js mongodb express

我在OS x上。我正在运行express.js应用程序。这就是我在app.js中所拥有的:

var express    = require('express');
var mongoose = require('mongoose');
var cn = 'mongodb://localhost/test';
mongoose.connect(cn, function(error) {
    console.log("inside?");
    console.log(res);
});
console.log("outside"); 

如果我打开一个终端写:

mongo

然后我看到了:

MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
Server has startup warnings: 
2017-04-13T16:25:17.440+0200 I CONTROL  [initandlisten] 
2017-04-13T16:25:17.440+0200 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-04-13T16:25:17.440+0200 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-04-13T16:25:17.440+0200 I CONTROL  [initandlisten] 
> show dbs
admin  0.000GB
local  0.000GB
test   0.000GB  

当我跑步时

node app.js

我在终端中唯一看到的是:

outside

所以它永远不会进入“连接”?我有一个回调,因为我意识到,当我尝试与数据库通信时代码挂起。我没有得到任何错误消息,但似乎我永远不能从快递查询mongodb。怎么了?我尝试了几种不同的连接字符串,例如127.0.0.1甚至127.0.0.1:27017但没有运气。

2 个答案:

答案 0 :(得分:0)

你的代码没有错,你会在外面得到响应,因为node.js没有阻止下一个代码执行,一旦回调返回你将获得输出的值。它为我工作。

 var express    = require('express');
    var mongoose = require('mongoose');
    var cn = 'mongodb://localhost/test';
    mongoose.connect(cn, function(error) {
        console.log("inside?");
        console.log(error);
    });
    console.log("outside"); 

输出控制台

outside
inside?
undefined

答案 1 :(得分:0)

使用“异步”或将连接初始化部分放在promise中将确保在建立连接之前阻止执行。

await mongoose.connect(cn, function(error) {
  console.log("inside?");
  console.log(res);
});

如果您使用的是await,请确保该函数具有async关键字。

使用承诺:

return new Promise((resolve, reject) => {
mongoose.connection.on('open', () => {
  debug('Connection successfully made');
  resolve();
});
mongoose.connection.on('error', () => {
  debug('Error occurred');
  reject();
});

});