Node.js 用sqlite3连接电子

Node.js 用sqlite3连接电子,node.js,electron,Node.js,Electron,我想把electron和sqlite3连接起来。下面列出了我的package.json文件 { "name": "electrontest2", "version": "1.0.0", "description": "", "main": "db.js", "scripts": { "start": "electron ." }, "scripts": { "start": "electron ." }, "author": "", "license":

我想把electron和sqlite3连接起来。下面列出了我的package.json文件

{
  "name": "electrontest2",
  "version": "1.0.0",
  "description": "",
  "main": "db.js",
  "scripts": {
    "start": "electron ."
  },

"scripts": {
"start": "electron ."
},
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron-prebuilt": "^1.2.2"
  },
  "dependencies": {
    "jquery": "^2.1.4",
    "sqlite3": "^3.1.4"
  }
}
但在执行npm启动时,它抛出了这个错误

App threw an error during load
Error: Cannot find module '/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node_sqlite3.node'
    at Module._resolveFilename (module.js:438:15)
    at Function.Module._resolveFilename (/var/www/tools/node/project/electrontest2/node_modules/electron-prebuilt/dist/resources/electron.asar/common/reset-search-paths.js:47:12)
    at Function.Module._load (module.js:386:25)
    at Module.require (module.js:466:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/sqlite3.js:4:15)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module '/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node_sqlite3.node'
    at Module._resolveFilename (module.js:438:15)
    at Function.Module._resolveFilename (/var/www/tools/node/project/electrontest2/node_modules/electron-prebuilt/dist/resources/electron.asar/common/reset-search-paths.js:47:12)
    at Function.Module._load (module.js:386:25)
    at Module.require (module.js:466:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/sqlite3.js:4:15)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
应用程序在加载过程中抛出错误
错误:找不到模块“/var/www/tools/node/project/electrontest2/node\u modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node\u sqlite3.node”
在Module.\u解析文件名(Module.js:438:15)
位于Function.Module.\u resolveFilename(/var/www/tools/node/project/electrontest2/node\u modules/electron prebuild/dist/resources/electron.asar/common/reset search path.js:47:12)
在Function.Module.\u加载(Module.js:386:25)
at Module.require(Module.js:466:17)
根据需要(内部/module.js:20:19)
反对。(/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/sqlite3.js:4:15)
在模块处编译(Module.js:541:32)
在Object.Module._extensions..js(Module.js:550:10)
在Module.load(Module.js:456:32)
在tryModuleLoad时(module.js:415:12)
主进程中发生JavaScript错误
未捕获异常:
错误:找不到模块“/var/www/tools/node/project/electrontest2/node\u modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node\u sqlite3.node”
在Module.\u解析文件名(Module.js:438:15)
位于Function.Module.\u resolveFilename(/var/www/tools/node/project/electrontest2/node\u modules/electron prebuild/dist/resources/electron.asar/common/reset search path.js:47:12)
在Function.Module.\u加载(Module.js:386:25)
at Module.require(Module.js:466:17)
根据需要(内部/module.js:20:19)
反对。(/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/sqlite3.js:4:15)
在模块处编译(Module.js:541:32)
在Object.Module._extensions..js(Module.js:550:10)
在Module.load(Module.js:456:32)
在tryModuleLoad时(module.js:415:12)
我想我是因为以下原因而犯了这个错误:

“/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/node-v46-linux-x64/node_sqlite3.node”

而不是

“/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node_sqlite3.node”


请告诉我哪里出错了。当前,在运行应用程序时,它抛出了上面列出的错误。

请尝试按如下方式重建sqlite3包:

cd node_modules/sqlite3
npm run prepublish
node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-linux-x64
node-gyp rebuild --target=0.37.2 --arch=x64 --target_platform=linux --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-linux-x64
检查你的电子版本是什么

electron -v

用electron软件包的vesion替换--目标值。

我尝试使用最新的节点版本(6.2.2)运行此功能,如果您使用的是较旧的版本,例如4.2,则您将获得较旧的捆绑包,而不是electron需要的v48:

npm install sqlite3 --build-from-source
并将node_modules/sqlite3/lib/binding中的文件夹从node-v48-linux-x64重命名为electron-v1.2-linux-x64

它开始抱怨要求回调,因为回调本应是可选的,但我只是这样添加了回调,结果奏效了:

var stmt = db.prepare(
  "INSERT INTO discount VALUES (?, ?, ?)",
  [1,2,3],
  () => true //Expected callback that is supposed to be optional
);

我只是出于简单的目的在我的electron应用程序中需要Sqlite,在我的实现中没有任何其他问题。

您是正确的,错误是因为编译的Sqlite模块默认以节点命名;所以电子找不到它。使用
节点gyp
以正确的名称重建,如中所示;但是使用npm软件包
electron builder
要容易得多,它将为您提供更好的工作流程,并且可以使用多个平台和版本,而无需为
节点gyp
添加脚本


请参阅一个类似的问题,其中详细介绍了如何使其工作。

首先在package.json中添加新的postinstall脚本

“脚本”:{
“postinstall”:“安装应用程序deps”
}

然后使用以下方法安装:

npm安装--保存开发人员electron builder
npm安装--保存sqlite3
安装后运行npm

您也可以在以下网址找到相同的内容:

谢谢@LuisPinto,我运行终端(Ubuntu 14.04)中列出的所有代码。但这并没有解决问题。它在/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/内创建一个新文件夹node-v47-linux-x64。我想我们需要这个路径中的文件夹“electron-v1.2-linux-x64”/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/”来解决这个问题。请告诉我怎么做??如果我做错了,请纠正我。提前感谢。节点版本:v4.4.5,NPM版本:2.15.5请告知哪个sqlite3版本与electron 1.2.2版本兼容。我试过类似于。。cd节点\u modules/sqlite3 npm运行预发布节点gyp configure--module\u name=node\u sqlite3--module\u path=../lib/binding/electron-v1.2-linux-x64节点gyp rebuild--target=0.27.1--arch=x64--target\u platform=darwin--dist url=--module\u name=node\u sqlite3--module path=../lib binding/electron-v1.2-linux-x64但抛出错误:module version不匹配。预期48,得到43。我认为这是版本问题。请帮助我了解我犯的错误。你有没有解决过这个问题。我遇到了完全相同的问题。重复的(?)