2013-08-17 76 views
4

目前我使用的節點sqlite3的sqlite的我node-webkit桌面應用程序結合,並用它作爲連接sequelize.js使用節點,WebKit的桌面應用程序源碼

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

和我所知,這本地編譯節點的sqlite3是與node-webkit一起使用sqlite db的唯一方法。

現在我想用在應用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) 
}) 

我怎麼能做到這一點? (即使用node-webkit應用程序和sqlite使用sequelize)

目標是通過運行遷移,使用模型來操作數據庫或者建議是否存在任何其他JavaScript庫(mvc是首選) ,它可以通過node-webkit + sqlite(以及如何使它們工作)工作。

是angularjs的一個選項?如果是的話,該怎麼做。

謝謝。

回答

3

我找到了解決方案。使用以下sqlite3的節點,WebKit和重建它作爲

node sqlite 3 for node-webkit
後它創建了一個名爲「node_sqlite3」的node_modules文件夾裏面。我將「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') 
}); 

並且記錄在數據庫中。

+0

我正在做一個類似的項目,在node-webkit應用程序中使用Sequelize + sqlite3。關於定義'sequelize'實例,'storage'選項的相對路徑是什麼?相對於應用程序根目錄('package.json'和'index.html'),數據庫去了哪裏? –

+0

@MikeTrpcic我仍在開發應用程序,所以目前sqlite數據庫是在應用程序文件夾內,但它必須在壓縮的應用程序之外,一旦它完成,無法找到它,肯定會共享,如果我找到一種方法。 – sunnyvilles

+0

我做了你說的,我得到這個錯誤= S'「未捕獲的錯誤:無法找到模塊'./binding/Release/node-v11-darwin-ia32/node_sqlite3.node'」,來源:module.js( 343)「有什麼想法? – mariowise

0

在Node-WebKit中,您可以使用完全用JavaScript編寫的模塊。對於包含C/C++的模塊,您應該使用node-gyp構建插件,因爲node-webkit的ABI(應用程序二進制接口)與Node的ABI不同。

嘗試像水木清華sequelize-sqlite 100%JS或找到模塊NPM去它的GitHub庫和下排提交,分支,釋放&貢獻者點擊有色排「顯示語言統計」。

+0

我只能使用node-sqlite3,因爲我已經通過node-gyp構建了它,並且我已經使用sequelize-sqlite來說明問題。無論如何,謝謝你的回答。 – sunnyvilles

1

我也有一個連接到SQLite數據庫從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' 

這是通向你的數據庫文件。它可以是絕對路徑或相對路徑。 ./表示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方法。

相關問題