首页 > 解决方案 > CouchDB 数据库创建/删除

问题描述

我有一个 NodeJS 应用程序,但在使用 nano 创建/删除数据库时遇到问题。我想检查是否有带有用户名的数据库。如果有一个数据库,我想清除它,所以我销毁它并创建一个新的。

module.exports.createDB = function () {
  try {
    nano.db.list().then((body) => {
      // body is an array
      body.forEach((db) => {
        if(db == getUser.username){
          nano.db.destroy(getUser.username)
        }
      });
    });
    nano.db.create(getUser.username).then((body) => {
      nano.use(getUser.username).insert(
        { "views": 
          { "webview": 
            { "map": "function (doc) {\n  emit(doc.msg, 1);\n}", "reduce": "_count" }
          }
        }, '_design/output', function (error, response) {
          console.log("Design Created");
        });
    })
  } catch (error) {
    console.log(error);
  }
}

如果没有同名的数据库,它工作正常,但如果有同名的数据库,我得到错误:

(节点:33354)UnhandledPromiseRejectionWarning:错误:无法创建数据库,文件已存在。

但是我不知道为什么,因为我之前销毁了这个数据库?

标签: node.jscouchdbnano

解决方案


您可以通过调用来检查数据库是否存在db.info()。如果它存在,您可以销毁它并重新创建它。如果它不存在,只需创建它:

const Nano = require('nano')
const nano = Nano(process.env.COUCH_URL)

const main = async () => {

  const DBNAME = 'mydb'
  const db = nano.db.use(DBNAME)
  try {
    const info = await db.info()
    console.log('DB Exists!', info)
    await nano.db.destroy(DBNAME)
  } catch (e) {
    console.log('DB does not exist!')
  }
  await nano.db.create(DBNAME)
}

main()

推荐阅读