【问题标题】:node script not getting completed节点脚本未完成
【发布时间】:2021-03-24 17:58:18
【问题描述】:

我有一个简单的脚本将数据转储到 db 中,我将它与 npm 脚本结合使用。我试图在我的节点应用程序服务器启动之前将数据转储到数据库中。但是转储脚本永远不会完成,因此服务器启动脚本不会启动。这是我的转储脚本 -

const mongodb = require('mongodb')
  , fs = require('fs')
  , MongoClient = mongodb.MongoClient
  , client = new MongoClient(`mongodb://localhost:27017/admin`, { useUnifiedTopology: true })
  , docs = fs.readFileSync(`${process.cwd()}/app/scripts/records.json`)

client.connect().then(cl => {
  const dbObj = cl.db('dumpdb')
  dbObj.collection(`loc_biz_hrs`).insertMany(JSON.parse(docs)).then(result => {
    console.log(`${result.insertedCount} records inserted`)
  })
})

这是我尝试使用 npm 脚本执行它的方式 -

"scripts": {
    "start": "node app/scripts/records.js && nodemon --exec babel-node index.js",
    "test": "test"
}

它只显示在终端 35755 records inserted 中并卡在那里并且不执行脚本的 index.js 部分。

【问题讨论】:

    标签: node.js mongodb npm es6-promise npm-scripts


    【解决方案1】:

    你没有使用cl.close()关闭连接,所以试试这个:

    const mongodb = require('mongodb')
      , fs = require('fs')
      , MongoClient = mongodb.MongoClient
      , client = new MongoClient(`mongodb://localhost:27017/admin`, { useUnifiedTopology: true })
      , docs = fs.readFileSync(`${process.cwd()}/app/scripts/records.json`)
    
    client
      .connect()
      .then(cl => {
        const dbObj = cl.db('dumpdb');
    
        dbObj
          .collection(`loc_biz_hrs`)
          .insertMany(JSON.parse(docs))
          .then(result => {
            console.log(`${result.insertedCount} records inserted`);
            cl.close();
          }).catch(error => {
            console.log(error);
            cl.close();
          })
      })
      .catch(error => {
        console.log(error);
      });
    

    【讨论】:

      【解决方案2】:

      尝试同时使用 npm 包 npm i 并发

      
      "scripts": {
          "start": "react-scripts start",
          "dev": ""concurrently \"node app/scripts/records.js\" \"nodemon --exec babel-node index.js\""
      }
      

      【讨论】:

      • 谢谢你,这确实解决了问题,但是过程没有完成对我来说仍然是一个谜。
      • 那么如果它可能 process.exit() 可以帮助在插入记录后完成
      猜你喜欢
      • 2013-11-13
      • 2020-05-15
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 2015-10-25
      相关资源
      最近更新 更多