使用ADM-ZIP(Node.js)将SQLite存储在内存数据库中

我试图使用sqlite3模块来创build一个内存的SQLite数据库和adm-zip模块来将其保存到一个zip文件。 到目前为止,我已经能够创build一个内存数据库并向其添加数据,但是我一直没有find一种方法将其存储在通过adm-zip制作adm-zip因为它需要文件,缓冲区或string。

我的问题是: sqlite3模块是否支持存储或保存为缓冲区? 如果不是的话,那么当脚本同时被用作一个可以被要求的模块和一个命令行脚本时,在Node.js中存储临时文件的一个明智的解决scheme是什么呢?

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

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

在继续寻求这个问题的答案时,我偶然发现了npm模块的temp并且能够把下面详细描述的可行解决scheme放在一起。

 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()创build的任何临时文件。

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

然后我创build了一个新的文件来存储sqlite数据库。

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

最后,我将sqlite文件写入内存zip文件,最后输出zip文件到sqlite close方法callback函数中。

 db.close(function () { zip.addFile('test.sqlite', fs.readFileSync(tempdb.path)); fs.writeFileSync('test.zip', zip.toBuffer(), 'utf8'); }); 

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