Javascript 在node.js和mongoose建立mongodb连接之前,如何拒绝数据模式?
我不理解一个特定的异步javascript代码:我在node.js上运行了几行非常简单的javascript,在这里我查询了一个本地mongoDB,在主线上它执行以下操作:Javascript 在node.js和mongoose建立mongodb连接之前,如何拒绝数据模式?,javascript,node.js,mongodb,mongoose,async-await,Javascript,Node.js,Mongodb,Mongoose,Async Await,我不理解一个特定的异步javascript代码:我在node.js上运行了几行非常简单的javascript,在这里我查询了一个本地mongoDB,在主线上它执行以下操作: 需要猫鼬 连接数据库的承诺 创建一个模式 从模式创建模型 定义一个异步函数来创建一个新对象,将其另存为mongoDB和console中的文档。记录尝试保存文档后返回的结果 我不明白的是console.log(“连接到数据库”)和console.log(来自document.save())的顺序:事实上,当保存时没有错
- 需要猫鼬
- 连接数据库的承诺
- 创建一个模式
- 从模式创建模型
- 定义一个异步函数来创建一个新对象,将其另存为mongoDB和console中的文档。记录尝试保存文档后返回的结果
const mongoose = require("mongoose")
mongoose
.connect(my_mongo_db_url)
.then(() => console.log("Connected to DB"))
.catch(err => console.log("Could not connect to DB"))
const courseSchema = new mongoose.Schema({ ...course schema... })
const Course= mongoose.model("Course", courseSchema )
async function createCourse(){
const course = new Course({ ...new course values... })
try { const result = await course.save()}
catch (err) { console.log(err.message)}
}
createCourse()
我在这里复制了@jornsharpe的评论,它回答了我的问题:
对course.save的调用可以在连接之前执行,但其内部实现会等待连接:“在连接到数据库之前可以验证数据,因为提供了架构,但在连接之前可能无法保存。哪一行代码会引发验证错误?因为
courseSchema=
和Course=
和Course=
都将在执行connect
中连接的实际代码有机会执行之前完全执行begin@jonrsharpe,好的,我明白了,db错误不是由db引擎返回的,而是由节点本身验证或不是我的数据返回的,由于整个index.js是异步的,所以在连接到db之前,会执行(并拒绝)createCourse()及其内部验证。好的,谢谢。但是在这种情况下,由于整个index.js是异步的,当没有错误时,createCourse()中的course.save()如何在连接到db之前不执行(因此我会有一个错误,比如“还没有db连接”)@JaromandaX,错误来自createCourse()中的wait course.save()的try/catch对course.save的调用可能会在建立连接之前执行,但其内部实现会等待连接:
const mongoose = require("mongoose")
mongoose
.connect(my_mongo_db_url)
.then(() => console.log("Connected to DB"))
.catch(err => console.log("Could not connect to DB"))
const courseSchema = new mongoose.Schema({ ...course schema... })
const Course= mongoose.model("Course", courseSchema )
async function createCourse(){
const course = new Course({ ...new course values... })
try { const result = await course.save()}
catch (err) { console.log(err.message)}
}
createCourse()