首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ADM-ZIP ( SQLite )存储内存数据库中的Node.js

用ADM-ZIP ( SQLite )存储内存数据库中的Node.js
EN

Stack Overflow用户
提问于 2014-10-11 17:40:41
回答 1查看 1.8K关注 0票数 3

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

我的问题是:sqlite3模块甚至支持作为缓冲区存储或保存吗?如果没有,那么当脚本同时用作可请购模块和命令行脚本时,在Node.js中存储临时文件的建议解决方案是什么?

我已经包含了用于下面测试的代码和一个可克隆的要点。

main.js

代码语言:javascript
复制
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

代码语言:javascript
复制
{
    "private": true,
    "dependencies": {
        "sqlite3": "3.0.2",
        "adm-zip": "0.4.4"
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 00:54:12

在继续寻找这个问题的答案的同时,我偶然发现了npm模块temp,并能够提出一个可行的解决方案,详见下文。

代码语言:javascript
复制
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()创建的任何临时文件的自动清理。

代码语言:javascript
复制
temp = require('temp').track(),

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

代码语言:javascript
复制
tempdb = temp.openSync('db.sqlite'),

最后,我将sqlite文件的编写移到内存zip和最终的输出zip文件到sqlite方法回调中。

代码语言:javascript
复制
db.close(function () {

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

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

});

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26317409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档