Node.js 超时和未处理的承诺拒绝-可能由异步
我用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: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);
});