Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js和mongoose建立mongodb连接之前,如何拒绝数据模式?_Javascript_Node.js_Mongodb_Mongoose_Async Await - Fatal编程技术网

Javascript 在node.js和mongoose建立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())的顺序:事实上,当保存时没有错

我不理解一个特定的异步javascript代码:我在node.js上运行了几行非常简单的javascript,在这里我查询了一个本地mongoDB,在主线上它执行以下操作:

  • 需要猫鼬
  • 连接数据库的承诺
  • 创建一个模式
  • 从模式创建模型
  • 定义一个异步函数来创建一个新对象,将其另存为mongoDB和console中的文档。记录尝试保存文档后返回的结果
我不明白的是console.log(“连接到数据库”)和console.log(来自document.save())的顺序:事实上,当保存时没有错误时,顺序似乎是正确的:我先是“连接到数据库…”,然后是返回的保存文档:

但如果由于不遵守某些要求而出现数据验证错误,则在“连接到数据库”之后打印“连接到数据库”:

关于代码的结构,我不明白为什么在打印错误后会打印“连接到数据库…”。我怀疑非同步代码是原因,但我不明白为什么。这几行非常简单的代码来自“使用Mosh编程”课程,我们可以在他的控制台上看到完全相同的行为

更多的代码细节:

    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()