node-webkit中使用sqlite3(MAC平台)
前言
最近使用node-webkit开发一款博客发布软件,来替换难用的Windows Live Writer(主要是对Markdown标签的支持很差劲)。为了解决博文信息临时保存的问题,想到了使用sqlite这个小型的数据库。折腾的过程中遇到不少问题,这里做个记录方便以后查阅。
安装Sqlite3模块
参考sqlite3的官方文档说明,使用npm install sqlite3安装sqlite3。
使用node-webkit测试官方给出的一段代码:
<script type="text/javascript"> var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database('data.db'); db.serialize(function() { db.run("CREATE TABLE lorem (info TEXT)"); var stmt = db.prepare("INSERT INTO lorem VALUES (?)"); for (var i = 0; i < 10; i++) { stmt.run("Ipsum " + i); } stmt.finalize(); db.each("SELECT rowid AS id, info FROM lorem", function(err, row) { console.log(row.id + ": " + row.info); }); }); db.close(); </script>
执行以上代码会报如下错误:
Uncaught Error: Cannot find module './binding/Release/node-v11-darwin-ia32/node_sqlite3.node'
这是因为我是用的node-webkit是32位的,而使用npm安装的sqlite3模块是针对node.js的64位版本,如下图所示:
看了下sqlite3的官方文档,文档中提到,nodejs和node-webkit的ABI不同,需要针对node-webkit重新编译sqlite3。
重新编译针对node-webkit的sqlite3模块
这个过程还是参考的sqlite3的官方资料,不过过程中遇到不少问题。
这里直接给出正确的编译步骤:
1. 没有安装nw-gyp的话,全局安装之:sudo npm install nw-gyp -g (nw-gyp可以用来编译针对node-webkit的C++ add on模块,因为node-sqlite3有部分代码是用C语言编写的,所以需要针对不同平台进行单独编译)
2. cd到sqlite3的安装目录(node_modules/sqlite3),执行重新编译命令:nw-gyp rebuild --target=0.8.4 --arch=ia32 (target参数是node-webkit的版本,根据自己使用的node-webkit版本号自行修改,arch参数是node-webkit的架构信息,我用的是mac 32位的node-webkit,所以必须指定为ia32)
3. 将编译的node_sqlite3.node(在node_modules/sqlite3/build/Release目录下)放到合适的目录:node_modules/sqlite3/lib/binding/Release/node-v11-darwin-ia32 (node-v11-darwin-ia32默认是不存在的,需要手动创建)
再次测试官方给出的代码
再次执行后控制台输出结果如下(可以看到select语句的查询结果输出,表明可以正常使用了):
据说看到好文章不推荐的人,服务器容易宕机!
本文版权归翟士丹(Stan Zhai)和博客园共有,原创文章,未经允许不得转载,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构