node.js - Sqlite Electron : Error: SQLITE_CANTOPEN: unable to open database file

标签 node.js angular sqlite electron node-sqlite3

我正在尝试在我的 Angular + Electron 应用程序中使用 node-sqlite3 打开 sqlite 数据库文件。

尽管我确保该文件存在并且 Electron 可以读取它,但当我尝试使用以下方法创建 sqlite 数据库时:

import * as sqlite from 'sqlite3';

// ...

const path = `${__dirname}/assets/sqlite.db`;

const fs = require('electron').remote.require('fs');
console.log(path);
if (fs.existsSync(AppConfig.sqlitePath)) {
  console.log('the file exists');
} else {
  console.log('the file does not not');
}

const myDb = new sqlite.Database(path, sqlite.OPEN_READONLY, (error) => {
  console.log(error);
});

该文件存在,因为我收到了正确的 console.log 消息,它看起来像:

/tmp/.mount_xxxxxx/resources/app.asar.unpacked/dist/assets/sqlite.db

但是,从 new sqlite.Database(...) 我收到以下错误,因为该文件不存在:

Error: SQLITE_CANTOPEN: unable to open database file

最佳答案

我收到了artiebits的提示来看看asarUnpack这确实是正确的做法。

<小时/>

我解决了:

1) 将以下内容添加到我的 electron-builder.json 中:

"asarUnpack": [
  "dist/assets/sqlite.db"
],

2)替换:

const path = `${__dirname}/assets/sqlite.db`;

与:

const path = `${__dirname}/assets/sqlite.db`.replace('app.asar', 'app.asar.unpacked');

关于node.js - Sqlite Electron : Error: SQLITE_CANTOPEN: unable to open database file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60422885/

相关文章:

node.js - 如何让我的 Express 应用程序在上传时尊重方向 EXIF 数据?

Node.js 客户端库批量请求 Gmail API

node.js - $pull in MongoDb 未按预期工作

javascript - 在构造函数中使用 FormBuilder 是一种不好的做法吗?

java - java String.format 可以处理替换吗?而不是 %s

c# - SQLite 插入语句

sqlite - LEFT OUTER JOIN 查询过滤器id

javascript - 用于使用 Node.js 模块完成代码的 WebStorm JSDoc 类声明

javascript - 在 Angular 2/TypeScript 中将 pdfMake 与数据输入一起使用

angular - Angular和Docker:无法从主机访问应用程序