尝试删除数据库文件时出现Node / Sqlite3:EBUSY错误

时间:2017-03-24 23:59:41

标签: node.js sqlite

我正在使用mocha并尝试在mocha挂钩之前/之后创建/删除sqlite数据库。但是,使用the node/sqlite library时,我在调用fs.unlinkSync(DB_PATH)时收到“错误:EBUSY:资源忙或已锁定...”。

幸运的是,我之后可以删除该文件,因此我认为该问题与node / sqlite库没有释放文件描述符有关。有没有办法创建/关闭数据库连接然后在同一程序中删除数据库文件,或者程序必须退出才能删除文件?以下是代码示例(在Windows 10上,节点v6.10.0):

var sqlite3 = require('sqlite3');

var fs = require('fs');
var childProc = require('child_process');

before(function() {
    childProc.execSync("sqlite3 ./test_db_data/test_db.sqlite3 < ./load_data/sql/init_model.sql").toString()
});

after(function() {
    fs.unlinkSync(DB_PATH);
});

describe('tests', function() {
    var db;
    before(function(done) {

        // set up database
        new Promise(function(resolve, reject) {
            console.log("Running promise");

            db = new sqlite3.Database(DB_PATH, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, function(err) {
                if (err) {
                    throw new Error("Couldn't create test database.");
                }
                resolve();
            });

        }).then(function() {
            server = app.start(DB_PATH, done);
        }, function(err) {
            console.log("Error opening database");
            done(err);
        });
    });

    after(function(done) {

        //stop server
        server.close();

        // delete database
        db.close(function(err) {
            if (!err) {
                done();
            } else {
                console.log(err);
                throw new Error("Couldn't close database connection.");
            }
        });
    });

0 个答案:

没有答案