在Electron应用程序上使用Sqlite3时,未定义流 - 节点的集阻塞模块

时间:2017-01-24 11:46:59

标签: sqlite stream webpack

我们正在开发一个通用应用程序,必须在任何浏览器中在移动设备(ios,android),桌面(windows,mac,linux)上执行。

对于客户端数据库管理,我们希望使用sqlite3 - 用于桌面 - 在这种情况下,应用程序将使用Electron(Atom shell)打包。我们使用的模块捆绑器是webpack,因为该应用程序是使用Ionic 2和Angular2开发的。

我们已经安装了sqlite3作为项目依赖项,node-pre-gyp为平台生成二进制文件(在这种情况下,我们使用Windows 7 64位进行测试)

我们有一个Sqlite3的提供者,这是代码:

import * as sqlite3 from 'sqlite3';

import { IDatabaseProvider } from './database.provider';


export class Sqlite3DatabaseProvider implements IDatabaseProvider {

    private _storage;

    constructor() {
        console.log('Initializing Sqlite3 Database Provider');
    }

    openDatabase() {
        this._storage =  new sqlite3.Database('v2App_sqlite3.db');
    }
}

正如您所注意到的那样,创建数据库的行被注释,因为应用程序正常工作。如果我取消注释该行,则会出现此错误:

Runtime Error
Cannot read property '_handle' of undefined
TypeError: Cannot read property '_handle' of undefined
    at http://localhost:8100/build/main.js:210758:15
    at Array.forEach (native)
    at module.exports (http://localhost:8100/build/main.js:210757:36)
    at Object.<anonymous> (http://localhost:8100/build/main.js:12580:1)
    at Object.<anonymous> (http://localhost:8100/build/main.js:12873:30)
    at __webpack_require__ (http://localhost:8100/build/main.js:20:30)
    at Object.<anonymous> (http://localhost:8100/build/main.js:69457:11)
    at Object.<anonymous> (http://localhost:8100/build/main.js:69638:30)
    at __webpack_require__ (http://localhost:8100/build/main.js:20:30)
    at Object.<anonymous> (http://localhost:8100/build/main.js:211548:72)

好奇的是,它在这里失败了,在set-blocking npm模块的代码中:

module.exports = function (blocking) {
  [process.stdout, process.stderr].forEach(function (stream) {
    if (stream._handle && stream.isTTY && typeof stream._handle.setBlocking === 'function') {
      stream._handle.setBlocking(blocking)
    }
  })
}

当流未定义时,获取_handle属性会产生错误。

但只有在我添加创建sqlite3数据库的行时才会执行此代码:

this._storage =  new sqlite3.Database('v2App_sqlite3.db');

这个模块(set-blocking)和sqlite3之间有什么关系?为什么在尝试创建sqlite3数据库时未定义流?

可能使用Node的outputStream生成一个文件 - 数据库 - 但仍然无法创建该对象 - 流。

任何帮助?

提前致谢

0 个答案:

没有答案