连接电子与sqlite3

我想连接电子与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_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'

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

你是正确的,错误是因为编译的SQLite模块默认命名为节点; 因此Electron找不到它。 使用node-gyp来重build正确的名字,正如在上面的答案应该工作; 但是使用npm包装的electron-builder会容易得多,它可以为您提供更好的工作stream程,并且可以在多个平台和版本上工作,而无需为node-gyp添加脚本。

看到这个答案类似的问题,详细说明如何得到它的工作。

尝试重buildsqlite3包如下:

 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 

用你的电子包裹取代–target值。

我试着用最新的Node版本(6.2.2)来运行这个,如果你使用的是比较老的版本。 那么4.2你会得到一个更老的包,而不是你的电子需要的v48:

 npm install sqlite3 --build-from-source 

只需将node_modules / sqlite3 / lib / binding中的文件夹从节点-v48-linux-x64重命名为electron-v1.2-linux-x64即可。

它开始抱怨要求callback,他们应该是可选的,但我只是像这样添加他们,它的工作:

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

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