Node.js Mongoose 5异步连接故障
根据,在初始连接期间处理错误的正确方法如下:Node.js Mongoose 5异步连接故障,node.js,asynchronous,mongoose,async-await,Node.js,Asynchronous,Mongoose,Async Await,根据,在初始连接期间处理错误的正确方法如下: try { await mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true }); } catch (error) { handleError(error); } 不幸的是,这会导致语法错误: await mongoose.connect(mongoConnectionString, { useNewUrlParser: true });
try {
await mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
} catch (error) {
handleError(error);
}
不幸的是,这会导致语法错误:
await mongoose.connect(mongoConnectionString, { useNewUrlParser: true });
^^^^^^^
SyntaxError: Unexpected identifier
当我删除wait时,代码执行时没有任何问题。当我用谷歌搜索SyntaxError:Unexpected identifier和await时,我发现当await与非异步函数一起使用时会发生这种情况。但这没有任何意义,因为Mongoose从第5版开始使用asnyc connect。此外,以下异步代码也正常工作:
mongoose.connect(mongoConnectionString, {
useNewUrlParser: true
})
.then(() => console.log('MongoDB Connected'))
.catch(err => console.log(err));
});
package.json中的依赖项:
猫鼬:^5.6.0
index.js:
那么wait在这里有什么问题呢?mongoose异步操作,默认情况下,它支持promise运行async它不需要等待函数,因为它在成功使用时是异步的,然后=>当它连接时如果发生错误,应该做什么使用catch=>错误发生时发生了什么,并且您应该在启动要作为异步函数运行的函数示例中使用关键字to use wait wait这是异步的 常量a=异步函数{
wait///what is wait需要domming根据官方的mongoosejs.com/docs,对初始mongoose.connect使用wait是正确处理错误的建议方法之一,因此我不想争论是否需要它。这并不能回答为什么wait不起作用的问题。@Hans wait不起作用,因为您正在非异步函数中使用它。您不能在未声明为异步的函数中使用wait。使用then和catch |等同于使用wait`btw;它们只是做同一件事的两种不同语法。@Paulpro感谢您的评论。我不明白如何建议在官方mongoose ressour上使用waitces,如果它是一个非异步函数。你确定吗?wait和then/catch可以是等效的,但如果你真的想暂停,并且在承诺返回之前不让其他代码执行,则不能。在初始连接的情况下,真正暂停,而不继续执行其他任何操作是有意义的。@Hans是否要暂停或停止not不会改变等待然后再执行相同操作的事实。它们都不会停止/阻止事件循环。@Hans文档只是没有显示上下文。带有WAIT的代码工作得很好,但它必须在异步函数中。在EcmaScript的未来版本通过之前,WAIT在任何其他地方都是语法错误。然后它将在非异步函数中仍然存在语法错误,但在所有函数之外的模块中都允许存在语法错误。
const express = require('express');
const app = express();
const mongoose = require('mongoose');
const mongoConnectionString = `mongodb://${process.env.MONGO_DB_USER}:${process.env.MONGO_DB_PW}@mongodb4711:27017/visitor-ips`;
initialMongoConnect(mongoose, mongoConnectionString);
function initialMongoConnect(mongoose, mongoConnectionString) {
try {
await mongoose.connect(mongoConnectionString, { useNewUrlParser: true });
} catch (error) {
handleError(error, mongoose, mongoConnectionString);
}
console.log('Initial connect to MongoDB successful');
}
function handleError(error, mongoose, mongoConnectionString) {
console.log('Error on initial connection: ' + error);
// wait 3 seconds and try to do the initial connect again
setTimeout(function() {initialMongoConnect(mongoose, mongoConnectionString)}, 3000);
}