MongoDB - 未连接到数据库并且.catch函数出错

时间:2017-12-13 14:06:54

标签: mongodb mongoose api-design

下面的代码是错误的,它会运行直到它到达Mongo DB的.catch函数。我无法弄清楚出了什么问题。如果我删除了捕获并让它出错,则会出现此错误 -

(node:72993)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):MongoError:第一次连接时无法连接到服务器[localhost:27017] [MongoError:connect ECONNREFUSED 127.0.0.1:27017] < / em>的

//Dependicies
var express = require("express");
var mongoose = require("mongoose");
var bodyParser = require("body-parser");
var routes = require('./routes/route');
var app = express();


//MongoDB
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/filmo', { useMongoClient: true }, function () {

console.log("Connected to Database")

}).catch(function () {
  console.log("Not Connected to Database ERROR!");


});


//Routes Listed
app.use('/', routes);


//Start Server
const defaultPortNumber = 8080
const port = process.env.PORT || defaultPortNumber

app.listen(port, err => console.log(err || `API is Running on port ${port}.`))

添加了代码,通过此链接查看错误实际说明的内容 - How do I find out where an unhandled promise rejection occured?

错误现在说 - MongoError:第一次连接时无法连接到服务器[localhost:27017] [MongoError:connect ECONNREFUSED 127.0.0.1:27017]

1 个答案:

答案 0 :(得分:0)

您在普通回调和承诺处理之间使用了一些奇怪的组合。如果您无法连接,这是您的问题,您将获得:

C:\test> node app
API is Running on port 8080.
Connected to Database
Not Connected to Database ERROR!

因为调用了回调函数和catch函数。

如果您要处理从connect返回的承诺,您应该使用then()catch(),如下所示:

mongoose.connect('mongodb://localhost/filmo', { useMongoClient: true }).then(() => {
    console.log("Connected to Database");
}).catch((err) => {
    console.log("Not Connected to Database ERROR! ", err);
});

如果连接失败失败,它将选择then函数或catch函数。

实际错误为 ECONNREFUSED 。这意味着您的应用程序无法连接到数据库。确保 mongod 正在运行。如果不是,您将得到完全错误的消息。如果不是这种情况,那么确保端口mongod正在运行是27017,因为如果你不在连接URL中提供它,那么这是默认端口。

最后,如果您缺少catch函数或者您没有在普通回调中处理错误,则会显示 UnhandledPromiseRejectionWarning 消息。

E.g。普通回调:

这会给你 UnhandledPromiseRejectionWarning

mongoose.connect('mongodb://localhost/filmo', { useMongoClient: true }, () => {
    console.log("Connected to Database");
})

这不会:

mongoose.connect('mongodb://localhost/filmo', { useMongoClient: true }, (err) => {
    if (err) throw err;
    console.log("Connected to Database");
})