2014-10-11 110 views
1

我试图使用sqlite3模块创建内存SQLite数据库并将adm-zip模块保存到zip文件中。到目前为止,我已经能够创建一个内存数据库并向它添加数据,但是我一直没有找到方法将它存储在通过adm-zip制作的zip中,因为它需要文件,缓冲区或字符串。使用ADM-ZIP(Node.js)将SQLite存储到内存数据库中

我的问题是:sqlite3模块是否支持存储或保存为缓冲区?如果没有,那么当脚本同时用作可请求的模块和命令行脚本时,如何在Node.js中存储临时文件是一个明智的解决方案?

我已经包含了我用来测试下面的代码和一个可复制的要点。

main.js

var fs = require('fs'), 
    admzip = require('adm-zip'), 
    sqlite3 = require('sqlite3').verbose(), 
    zip = new admzip(), 
    db = new sqlite3.Database('test.sqlite'); 
    // db = new sqlite3.Database(':memory:'); 

db.serialize(function() { 

    db.run('CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY, name TEXT);'); 
    db.run('INSERT OR IGNORE INTO test(name) VALUES ("neogeek");'); 

}); 

zip.addFile('README.md', '#SQLite3 + ADM-ZIP Test'); 

// zip.addFile('db.sqlite', db); 

db.close(); 

fs.writeFileSync('test.zip', zip.toBuffer(), 'utf8'); 

的package.json

{ 
    "private": true, 
    "dependencies": { 
     "sqlite3": "3.0.2", 
     "adm-zip": "0.4.4" 
    } 
} 

https://gist.github.com/neogeek/70c80c7ddaf998bee4bd

回答

1

在继续追求这个问题的答案我偶然发现了NPM模块temp和能够把一个可行的解决方案放在一起详情如下。

var fs = require('fs'), 
    temp = require('temp').track(), 
    admzip = require('adm-zip'), 
    sqlite3 = require('sqlite3').verbose(), 
    zip = new admzip(), 
    tempdb = temp.openSync('db.sqlite'), 
    db = new sqlite3.Database(tempdb.path); 

db.serialize(function() { 

    db.run('CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY, name TEXT);'); 
    db.run('INSERT OR IGNORE INTO test(name) VALUES ("neogeek");'); 

}); 

zip.addFile('README.md', '#SQLite3 + ADM-ZIP Test'); 

db.close(function() { 

    zip.addFile('test.sqlite', fs.readFileSync(tempdb.path)); 

    fs.writeFileSync('test.zip', zip.toBuffer(), 'utf8'); 

}); 

我列入临时模块,并确保激活与.track()创建的任何临时文件的自动清理。

temp = require('temp').track(), 

我然后创建一个新的文件到SQLite数据库存储英寸

tempdb = temp.openSync('db.sqlite'), 

最后我感动都sqlite的文件写入到内存中的zip和最终输出的zip文件到sqlite关闭方法回调。

db.close(function() { 

    zip.addFile('test.sqlite', fs.readFileSync(tempdb.path)); 

    fs.writeFileSync('test.zip', zip.toBuffer(), 'utf8'); 

}); 

https://gist.github.com/neogeek/70c80c7ddaf998bee4bd

+0

大给予好评这里。这真的很有用。 – Lolums 2015-12-02 06:43:25

相关问题