目前我在我的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的选项吗?如果是的话怎么做
谢谢你。答案 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-webkit
从sequelize
连接到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 null
。 sqlite:
前缀之后的部分是无效的,甚至可以省略,因为实际的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存储库和行提交,分支,发布和&贡献者点击彩色行“显示语言统计信息”。