前言

最近使用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语句的查询结果输出,表明可以正常使用了):

转载于:https://www.cnblogs.com/jasondan/p/3500965.html

node-webkit中使用sqlite3(MAC平台)相关推荐

  1. Appnium安装-Mac平台

    Appium的安装-MAC平台 其实Appium的安装方式主要有两种: 1)自己安装配置nodejs的环境,然后通过npm进行appium的安装 2)直接下载官网提供的dmg进行安装,dmg里面已经有 ...

  2. 如何在Node.js中获取本机本地IP地址

    最近在做Cloud related的项目时,遇到一个问题,就是如何在Node.js中获取本机的IP地址.Node.js提供的API中,只能获取本机的hostname. os = require('os ...

  3. 消息队列Rabbitmq,在Node.js中的应用

    为什么写这篇文章 现在的面试要求越来越高了,打开看了看几个 BOSS 招聘 Node.js 全栈开发的,其中都有一条"了解 消息队列,并在项目中应用过",呜呜呜 后端开发者应该都知 ...

  4. 在Docker中运行EOS(MAC版)

    在Docker中运行EOS(MAC版) 在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河.记录如下: 安装依赖 Docker 版本 17.05或者更高 tes ...

  5. 关于nwjs中编译sqlite3的记录

    如果要在nwjs中使用sqlite3,则安装sqlite3之后需要手动编辑sqlite3后才能使用,总结如下: 1.编译sqlite3的时候,当前环境的node版本NODE_MODULE_VERSIO ...

  6. 在Mac平台使用GitHub和Hexo搭建博客

    欢迎参与讨论,转载请注明出处. 本文转载自https://musoucrow.github.io/2017/02/26/build_bolg/ 前言 在整这个博客时遇到了不少坑,正适合作为此博客的第一 ...

  7. node/js 漏洞_6个可用于检查Node.js中漏洞的工具

    node/js 漏洞 Vulnerabilities can exist in all products. The larger your software grows, the greater th ...

  8. node mongoose_如何使用Express,Mongoose和Socket.io在Node.js中构建实时聊天应用程序

    node mongoose by Arun Mathew Kurian 通过阿伦·马修·库里安(Arun Mathew Kurian) 如何使用Express,Mongoose和Socket.io在N ...

  9. 在node.js中一次读取一行文件?

    本文翻译自:Read a file one line at a time in node.js? I am trying to read a large file one line at a time ...

  10. 如何在Node.js中退出

    用于退出的命令是什么? (即终止Node.js进程) #1楼 从命令行, .exit就是你想要的: $ node > .exit $ 它在REPL文档中有记录 . REPL(Read-Eval- ...

最新文章

  1. 面试:HashMap 夺命二十一问!鸡哥都扛不住~
  2. 在Ubuntu17.04中遇到无法清空回收站解决方法
  3. numpy.random.normal详解
  4. redis的安装及springDataRedis
  5. 向量合并 matlab,MATLAB追加向量
  6. 从拿到班车手册.xls到搜索附近班车地点
  7. pandas 替换 某列大于_Pandas使用总结
  8. 软件工程导论 08章软件维护
  9. keil spi 调试_单片机软件出问题了?有经验的工程师这么调试
  10. Pycharm中如何pip下载包更快
  11. 关于DynamipsGUI
  12. 马士兵java学习之路
  13. Python自学笔记11:实操案例八(咖啡馆、2019中超联赛前五,模拟手机通讯录)
  14. 对接钉钉API语音功能相关文档
  15. 共轭复数,共轭根式,共轭矩阵,共轭方向,共轭方向法,共轭梯度法,共轭分布,共轭函数,傅里叶变换的共轭对称
  16. 有没有ai绘画教程?什么软件能实现ai绘画?
  17. 数据技术-分析报告如何写
  18. 付费专栏-付费课程-【购买须知】
  19. 《进击的巨人》展现了日本羸弱的二次元文化
  20. 新动力计算机学校怎么样,东莞新动力Dj学校怎么样

热门文章

  1. 深度学习入门者选择开源框架丨硬创公开课群友问答
  2. Swift - 设置应用程序图标的提醒个数(右上角小红圈)
  3. (剑指Offer)面试题58:二叉树的下一个结点
  4. 【Android开发】高级组件-选项卡
  5. linux之使用cron,logrotate管理日志文件
  6. nginx 编译安装,服务查看启停,以及模块的追加编译
  7. Normalize.css – 现代 Web 开发必备的 CSS resets
  8. 如何删除档案中的重复的行
  9. 在Windows上删除所有的Oracle安装 和电脑名改变后的设置...
  10. B站游戏大佬飘了?深挖B站辱北邮事件经过:不是第一次