下面的代码是错误的,它会运行直到它到达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]
答案 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");
})