Node.js 超时和未处理的承诺拒绝-可能由异步

Node.js 超时和未处理的承诺拒绝-可能由异步,node.js,express,mongoose,Node.js,Express,Mongoose,我用node.js编写了一个简单的应用程序。我添加了一些新路线,整个服务意外地停止了工作。控制台显示: (node:22568) UnhandledPromiseRejectionWarning: MongooseError: Operation `users.find()` buffering timed out after 1 0000ms 我的连接看起来: mongoose.connect( process.env.DB_CONNECTION, {useNewUrlPar

我用node.js编写了一个简单的应用程序。我添加了一些新路线,整个服务意外地停止了工作。控制台显示:

(node:22568) UnhandledPromiseRejectionWarning: MongooseError: Operation `users.find()` buffering timed out after 1
0000ms
我的连接看起来:

mongoose.connect(
    process.env.DB_CONNECTION,
    {useNewUrlParser:true},
    ()=>console.log('connected to DB')
);
我的路线:

router.get('/index', async function (req,res) {
    console.log(req.user);
    var usr = await User.find({});
         console.log(usr);

    console.log("cars "+usr);
    res.render('main', {user: req.user, cars:usr } )
});
我还尝试了异步连接:

(async () => {
    try {
        await mongoose.connect(
    process.env.DB_CONNECTION,
    {useNewUrlParser:true},
    ()=>console.log('connected to DB')
    );}
catch (exc){console.log('conn error!')}
})()

并使用try-catch进行路由(与上面的代码几乎相同,但被try-catch块包围)。然后服务处理请求很长时间,然后给出
GET/index--ms--
500
。我不知道发生了什么。

以下错误消息:

UnhandledPromiseRejectionWarning: MongooseError: Operation `users.find()` buffering timed out after 10000ms
似乎表明存在连接问题-您可能知道,mongoose在连接实际打开的同时缓冲查询,但默认情况下最终在10秒后超时

有没有在初始连接发生后尝试侦听连接错误


用户转到1,Imdranged为我指明了寻找答案的方向。我用错误处理程序编写了到db和函数的异步连接。我会把它贴在下面,也许将来会有人使用它。再次感谢“goto1”和“Imdranged”以及帮助我的匿名伙伴。享受

async function foo() {
    try {
    console.log("An attempt to connect");
await mongoose.connect(
    process.env.DB_CONNECTION,
    {useNewUrlParser:true},
    ()=>console.log('connected to DB')

)}catch (err){    console.log("Error during connection: "+err);
}}
foo();
mongoose.connection.on('error', err => {
    console.log("Error after connection: "+err);
});

当您使用
async/await
时,您一定要在您的路线控制器内使用
try/catch
——否则您没有正确处理错误,可能会导致
未经处理的PromisejectionWarning
错误。另外,您是否在任何地方看到连接到DB的
消息?我使用了try catch,同样的情况也会发生(我在问题中写道),是的,我每次运行应用程序时都看到连接到DB:/那么您不应该看到
未处理的PromisejectionWarning
,如果这是错误来源。你的电脑可能有问题,所以我会集中讨论。您发布的代码很好,假设您将路由处理程序包装在一个
try/catch
@goto1谢谢,下面我添加了我自己的答案。谢谢,它帮助了我,下面我添加了我的答案很高兴听到您设法解决了这个问题。
async function foo() {
    try {
    console.log("An attempt to connect");
await mongoose.connect(
    process.env.DB_CONNECTION,
    {useNewUrlParser:true},
    ()=>console.log('connected to DB')

)}catch (err){    console.log("Error during connection: "+err);
}}
foo();
mongoose.connection.on('error', err => {
    console.log("Error after connection: "+err);
});