用于 Windows 的 nodejs 上的 SQLite

Posted

技术标签:

【中文标题】用于 Windows 的 nodejs 上的 SQLite【英文标题】:SQLite on nodejs for Windows 【发布时间】:2011-09-11 17:56:04 【问题描述】:

我有一个非常简单的问题。如何在 Windows 下将任何 SQLite 库与 nodejs 一起使用?我查看了 sqlite3 库,它需要特定于 linux 的编译。总的来说,这不是我第一次面临这种类型的问题。我对 TameJS 有同样的问题。如果有人知道任何解决方案,我将不胜感激。谷歌沉默了。

PS:Cygwin 不是一个选项。目标应用程序应该是一个易于使用的便携式数据库,由 nodejs 驱动,并具有 Web 浏览器界面。

【问题讨论】:

node-sqlite/44 将允许模块在 Windows 上构建(或 43 路由)。 【参考方案1】:

在底部阅读更新 2 (2013-12-06) - 现在有一个纯 JS module 看起来很有希望用于 Windows 工作...

我一直遇到类似的问题,并且在重新链接 Windows SQLite(或编译现有的 nodejs 包)时害羞了一些漂亮的魔法,我能想到的最好的办法是使用子进程并外壳到控制台 sqlite 客户端,然后捕获结果...不是最漂亮的,我不知道这是否可以扩展,但在有限的 Intranet 场景中它可能是 Good Enough™。

更新:

这是我拼凑的一些代码 - 如果您对 child_process 模块不太熟悉,请给您一个想法。这适用于nodejs 0.6.0

首先我构建了从 sqlite 中提取某些内容所需的命令:

var cmd = '"' + sqlitePath + '" "' + dbPath + '" "select * from sqlite_master"';

注意,如果您包含可选标志 -noheader-list,那么您可能会获得更好的解析输出。您还可以使用-separator 'x' 控制字段分隔符,其中x 是您的分隔符。

然后我实际上产生了子进程:

var child = exec(cmd, function(error, stdout, stderr) 
        if (error) 
            console.log('error while trying to do stuff...');
            // error message in error and stderr
         else 
            console.log('success');
            // successful stuff is in stdout
        
    );

结合一些字符串解析和使用 sqlite 控制台客户端的选项,您可能能够做到这一点。但是,我确实要再说一遍,这不是经过生产测试的 - 我只是在模拟一些 Intranet 的东西,即使这样我也确信这不是最好的方法!

更新 2 (2013-12-06):

对于现在阅读此问题的人们,您可能有兴趣查看 github 上的 sql.js;它是 sqlite 的纯 JS 实现,看起来很有希望在 Windows(或任何平台)上进行交互。请注意,通过 npm 安装包的名称是node-sqlite-purejs

【讨论】:

哇,是的,有时这些“直接”的解决方法会出现。凉爽的! maenwhile 我决定只使用 nodejs 作为 web 服务器,而主服务器是用 java 编写的,通过 tcp 与 nodejs 通信。因为在我看来,我不是一个足以在 javascript 上编写完整应用程序的绝地武士)但是使用 exec 的解决方案将完美地适用于我仍然想保留在 nodejs 部分的小型数据库 - 身份验证、设置和数据缓存数据库。谢谢!

以上是关于用于 Windows 的 nodejs 上的 SQLite的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上的 nodejs 和 websockets

Nodejs:将 Ctrl+C 发送到 Windows 上的子进程

从运行在 Linux 上的 nodejs 通过 *** 访问 Windows 服务器上的数据库

nodejs入门API之path模块

NodeJS 远程连接windows 上的MongoDB

docker-compose ECONNREFUSED 用于 nodeJS 上的 Postgres