繁体   English   中英

Express.js无法连接到mongodb

[英]Express.js cannot connect to mongodb

我在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

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

您的代码没什么错,您将在外面得到响应,因为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

使用“异步”或将连接初始化部分放在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();
});

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM