使用sqlite将sequelize.js连接到node-webkit桌面应用程序

时间:2013-08-17 17:23:31

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

目前我在我的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 app上使用sequelize)

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

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

谢谢你。

3 个答案:

答案 0 :(得分:2)

我找到了解决方案。使用以下sqlite3 for node-webkit并在

中重建它

node sqlite 3 for node-webkit
它在node_modules中创建一个名为“node_sqlite3”的文件夹。我将“node_sqlite3”重命名为“sqlite3”。然后做了sequelize-sqlite的npm-install。
在此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')
});

并且记录在数据库中。

答案 1 :(得分:1)

我在使用node-webkitsequelize连接到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:前缀之后的部分是无效的,甚至可以省略,因为实际的db位置在storage选项中指定。 dialect选项也可以省略,因为连接字符串前缀中提到了db类型。所以你可以简单地使用

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

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

答案 2 :(得分:0)

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

尝试像 sequelize-sqlite 那样100%JS或在npm中找到模块的gitHub存储库和行提交,分支,发布和&贡献者点击彩色行“显示语言统计信息”。