4

目前我在我的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 是一个选项吗?如果是的话怎么做。

谢谢你。

4

3 回答 3

2

我找到了解决方案。在使用以下 sqlite3 for 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')
});

并且记录在数据库中。

于 2013-09-15T21:40:41.580 回答
1

我在node-webkit使用sequelize. 通过反复试验,我提供了以下解决方案。

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 null. 前缀后面的部分sqlite:是无关紧要的,甚至可以省略,因为实际的数据库位置在storage选项中指定。dialect选项也可以省略,因为连接字符串前缀中提到了 db 类型。所以你可以简单地使用

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

还值得注意的是.success.error方法已被弃用。在写这篇文章的时候,最新版本的 Sequelize (3.21) 使用.then方法来处理如果承诺被履行的操作,以及.catch如果承诺被拒绝则使用方法。

于 2016-04-04T20:43:33.253 回答
0

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

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

于 2013-08-22T09:38:36.493 回答