gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:51 25 4
gpt4 key购买 nike

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

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

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

ma​​in.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,并能够组合出一个可行的解决方案,如下所述。

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 close 方法回调中。

db.close(function () {

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

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

});

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

关于node.js - 使用 ADM-ZIP (Node.js) 将 SQLite 存储在内存数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com