在本地应用中数据持久化是很常见的,人们常使用嵌入外部数据库或写入txt文本的方式来保存数据。然而,在node-webkit有更好的选择,你可以独立使用Web SQL Database, embedded databases, Web Storage 或者 Application Cache 而没有任何额外的依赖。
另外,nw.js提供了App.dataPath的方法可以准确获取到应用存储在本地的数据位置。
Web SQL Database
Web SQL Database的API并不是HTM5规范的一部分而是自己拥有独立规范,它提供了一套使用SQL操作客户端数据库的方法。在介绍API之前,我们假设你基本熟悉SQL语句和用法。
Web SQL Database的API在node-webkit中继承于sqlite,在使用上基本一致:
openDatabase:该方法用于打开数据库对象。
transaction:该方法赋予我们执行相关数据库语句或者回滚的能力。
executeSql:该方法用于执行数据库语句。
如需要打开一个数据库,你可以使用一下代码:
var db = openDatabase('mydb', '1.0', 'my first database', 2 * 1024 * 1024);
方法中包含了4个参数,分别是数据库名称、版本号、数据库描述和数据库预估大小。如果你想打开一个并不存在的数据库,该方法将会自动创建一个新的数据库,同时在你使用完成后并不需要关闭数据库。
创建一个表,插入数据和查询数据,你可以使用transaction和executeSql:
// Create table and insert one line
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS foo (id unique, text)');
tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "synergies")');
tx.executeSql('INSERT INTO foo (id, text) VALUES (2, "luyao")');
});
// Query out the data
db.transaction(function (tx) {
tx.executeSql('SELECT * FROM foo', [], function (tx, results) {
var len = results.rows.length, i;
for (i = 0; i < len; i++) {
alert(results.rows.item(i).text);
}
});
});
如果你想了解更多Web SQL Database的信息,你可以参考:
http://html5doctor.com/introducing-web-sql-databases/
另外如果你需要了解更多其他的DB存储,如IndexedDB、PouchDB、EJDB、NeDB、LinvoDB、MarsDB、StoreDB和LowDB,你可以参考:
https://github.com/nwjs/nw.js/wiki/Save-persistent-data-in-app
Web Storage
Web storage是一种简单地使用键值的存储方式,你可以像js对象一样直接使用它,但是所有的数据都将会保存再你的硬盘里。
Web storage有两种存储类型,分别是:
localStorage :没有任何期限地存储数据。
sessionStorage :只在本次应用中存储数据,当应用关闭后所有数据自动销毁。
它们的使用方法很简单,只需直接调用localStorage 对象或者sessionStorage 对象即可,如下:
localStorage.love = "luyao";
// Love lasts forever
console.log(localStorage.love);
sessionStorage.life = "";
// But life will have an end
console.log(sessionStorage.life);
如需移除一个键值项,可以使用
localStorage.removeItem("love");
值得提醒的是,想要使用Web storage来存储大数据并不切合实际,因为API调用时同步的,而且并没有索引查询,如果在大量数据中执行相关操作将会变得非常的慢。
Application Cache
HTML5支持应用缓存,这意味着可以在没有任何额外连接的情况下进行数据存储。使用Application Cache主要有以下3个优势:
离线浏览:用户可以在断网的情况下继续浏览数据。
速度:使用Application Cache存储速度将会更快。
减少服务器负载:从服务器上下载过的资源可以重复使用。
然后,Application Cache的设计是主要用于浏览器用户,针对node-webkit用户最好还是使用上面介绍的两种存储方式,如果你想要更多地了解Application Cache,可以参考:http://www.w3schools.com/html/html5_app_cache.asp