【问题标题】:connect sequelize.js to node-webkit desktop app using sqlite使用 sqlite 将 sequelize.js 连接到 node-webkit 桌面应用程序
【发布时间】:2013-08-19 22:22:15
【问题描述】:

目前我在我的node-webkit 桌面应用程序上使用 node-sqlite3 sqlite 绑定并将其用作

var sqlite3 = require('node_sqlite3').verbose();
var db = new sqlite3.Database('file:data.db');
db.run(query);

据我所知,本机编译的 node-sqlite3 是将 sqlite db 与 node-webkit 一起使用的唯一方法。

现在我想在通常用作的应用上使用sequelize

var Sequelize = require('sequelize-sqlite').sequelize
var sqlite    = require('sequelize-sqlite').sqlite
var sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'sqlite',
storage: 'path/to/database.sqlite'
})
sequelize.query("SELECT * FROM myTable").success(function(myTableRows) {
console.log(myTableRows)
})

我怎样才能做到这一点? (即,在带有 sqlite 的 node-webkit 应用程序上使用 sequelize)

目标是通过运行迁移使数据库生活更轻松,使用模型来操作数据库,或者建议是否有任何其他 javascript 库(首选 mvc),它可以通过 node-webkit+sqlite 工作(以及如何让它们工作)。

angularjs 是一个选项吗?如果是的话怎么做。

谢谢。

【问题讨论】:

    标签: javascript angularjs sqlite sequelize.js node-webkit


    【解决方案1】:

    我找到了解决方案。在将以下 sqlite3 用于 node-webkit 并像在

    中那样重建它之后

    node sqlite 3 for node-webkit
    它会在 node_modules 中创建一个名为“node_sqlite3”的文件夹。我将“node_sqlite3”重命名为“sqlite3”。然后做了 npm-install 的 sequelize-sqlite 。
    此sequelize-sqlite自动识别并连接到sqlite3后就可以正常使用了。

    var Sequelize = require('sequelize-sqlite').sequelize
    var sqlite    = require('sequelize-sqlite').sqlite
    
    var sequelize = new Sequelize('database', 'username', '', {
    dialect: 'sqlite',
    storage: 'file:data.db'
    })
    
    var Record = sequelize.define('Record', {
    name: Sequelize.STRING,
    quantity: Sequelize.INTEGER
    })
    
    sequelize.sync()
    .success(function(){
    console.log('synced')
    })
    
    var rec = Record.build({ name: "sunny", quantity: 3 });
    rec.save()
    .error(function(err) {
    // error callback
    alert('somethings wrong')
    })
    .success(function() {
    // success callback
    console.log('inserted')
    });
    

    记录在数据库中。

    【讨论】:

    • 我正在做一个类似的项目,在 node-webkit 应用程序中使用 Sequelize+sqlite3。关于定义sequelize 实例,storage 选项的相对路径是什么?相对于应用程序根目录(package.jsonindex.html),数据库在哪里?
    • @MikeTrpcic 我仍在开发应用程序,因此目前 sqlite db 位于应用程序文件夹内,但一旦完成,它必须在压缩应用程序之外,尚无法弄清楚,如果我找到了办法。
    • 我按照你说的做了,但我收到了这个错误 =S "Uncaught Error: Cannot find module './binding/Release/node-v11-darwin-ia32/node_sqlite3.node'", source: module.js (343)Any idea?
    【解决方案2】:

    我在使用sequelizenode-webkit 连接到 SQLite 数据库时也遇到了问题。通过反复试验,我得出了以下解决方案。

    var Sequelize = require('sequelize');
    var sequelize = new Sequelize('sqlite:mydb.sqlite3', {
      dialect: 'sqlite',
      storage: './mydb.sqlite3'
    });
    
    sequelize.query("SELECT * FROM tableName", { type: db.QueryTypes.SELECT })
    .then(function(result) {
      console.log(result);
    })
    .catch(function (e) {
      console.log(e);
    });
    

    请注意,对于 SQLite 数据库,您必须指定

    storage: './mydb.sqlite3'
    

    这是您的 db 文件的路径。它可以是绝对路径或相对路径。 ./ 表示package.json 所在的项目根文件夹。

    此外,连接字符串必须包含 sqlite: 前缀。否则,它将引发异常:Cannot read property 'replace' of nullsqlite: 前缀之后的部分无关紧要,甚至可以省略,因为实际的数据库位置在 storage 选项中指定。 dialect 选项也可以省略,因为连接字符串前缀中提到了 db 类型。所以你可以简单地使用

    var sequelize = new Sequelize('sqlite:', {
      storage: './mydb.sqlite3'
    });
    

    还值得注意的是,.success.error 方法已被弃用。在撰写本文时,最新版本的 Sequelize (3.21) 使用.then 方法处理承诺,如果承诺被履行,.catch 方法如果承诺被拒绝。

    【讨论】:

      【解决方案3】:

      在 Node-WebKit 中,您可以使用完全用 JavaScript 编写的模块。对于包含 C/C++ 的模块,您应该通过 node-gyp 构建插件,因为 node-webkit 的 ABI(应用程序二进制接口)与 Node 的 ABI 不同。

      尝试像 sequelize-sqlite 这样的 100% JS 或在 npm 中找到模块转到它的 GitHub 存储库并在 提交、分支、发布和贡献者行下点击彩色行“显示语言统计”。

      【讨论】:

      • 我只能使用 node-sqlite3,因为我已经通过 node-gyp 构建了它,并且我已经在使用 sequelize-sqlite,正如问题所说。无论如何,谢谢你的回答。
      猜你喜欢
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2015-09-22
      • 2023-04-04
      • 1970-01-01
      • 2016-06-08
      • 2013-05-02
      相关资源
      最近更新 更多