【问题标题】:Options for offline/local storage without a database for javascript app没有用于 javascript 应用程序的数据库的离线/本地存储选项
【发布时间】:2014-02-03 04:11:14
【问题描述】:

这是我的场景:

我熟悉 Javascript,并希望创建一些简单的应用程序以供个人在工作中使用或作为概念证明来展示,然后再进一步使用它们并获得实际的 Web 服务器空间。但是,我不想在我的机器上设置一个实际的数据库。如果可能的话,我更喜欢读/写本地 JSON 文件。这是我有点卡住的地方,因为我的大多数查询都在 html 5 FileSystem API 或 Node.js(已经安装在我的机器上)或现在可能存在的其他任何东西之前出现了旧信息。

有没有人知道使用无数据库存储或类似的东西创建离线 MVP 的教程?或者只是关于入门的一般建议?

我一直在阅读 HTML 5 文件系统 API 和 Node.js FS 资料,但没有示例,我发现很难知道从哪里开始。

【问题讨论】:

  • 您更喜欢在客户端还是服务器端存储?
  • @kevpoccs 客户端,因为没有服务器
  • 如果您正在寻找客户端存储,那么 node 的 fs 模块可能不是您想要的。这是服务器端的事情。
  • @teharron,你看过 Web SQL 数据库吗?
  • @juanpaco 感谢您的提醒,由于我不会在服务器上运行节点,因此不确定它是否有用。

标签: javascript node.js local-storage offline html5-filesystem


【解决方案1】:

您可以通过将对象转换为字符串并存储为 cookie 或使用本地存储来自己编写:

var data = { 'example': 324324 };
document.cookie = JSON.stringify(data);
var loaded = document.cookie.split(';');
console.log(JSON.parse(loaded [0]));

或者使用一个库来为你做这件事!

http://brian.io/lawnchair/

【讨论】:

  • 这似乎正是我想要的,我对它的简单性感到惊讶。草坪椅看起来特别优雅。谢谢!
  • Cookie 有大小限制 (4KB),因此根据您要存储的大小,cookie 存储可能不是正确的解决方案。根据浏览器支持要求,查看字符串化(即 JSON)数据的本地存储。
【解决方案2】:

2014 年 4 月 24 日,W3C 正式将 FileSystem API 成熟为 Working Group Note,使用此技术进行开发时应谨慎,不确定是否或如何很长一段时间它会一直存在。

IndexedDB 有望成为一个有前途的替代方案/解决方法,或许可以查看html5 rocks tutorial。在下面留下我最初的答案,因为它仍然有效,但想对文件系统 API 提出警告。


我看到你得到了答案,但我想为文件系统 api(你也问过)提供一个解决方案 使用 cookie,你有大小限制,但要回答你问题的另一面,下面是 article I used to get started with the HTML5 File-system API

文件系统 api 中的所有其他内容都围绕获取对文件的引用,然后创建写入器、读取器等。特定于该文件实例。当文件写入器、读取器、引用完成加载时,将传递/执行回调函数。

请求存储配额/获取对文件系统的引用

var onInitFs = function(fs){
    fileSystem = fs;//set global reference to the filesystem
};
var errorHandler = function(e){console.log('Error', e);};
navigator.webkitPersistentStorage.requestQuota(1024*1024*1024*5, function(grantedBytes) {
    window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler); 
}, errorHandler);

制作文件

fileSystem.root.getFile("filepathtoJSON", {
            create: true
}, callback, errorHandler);

将 JSON 写入文件

fileSystem.root.getFile("filepathtoJSON", {create: true}, function(fileEntry) {
        fileEntry.createWriter(function(writer) {
            writer.onwriteend = function(e) {
                writer.onwriteend = function(e){
                    callbackFunction();
                }
                writer.onerror = function(e3){console.log(e3);}
                var blob = new Blob([JSON.stringify(targetJSONobj)]);
                writer.write(blob);
            };
            writer.onerror = function(e3) {console.log(e3);};
            writer.truncate(0);
        }, errorHandler);
   }, errorHandler);

从文件中读取 JSON/创建 fileReader(在回调函数中传递 JSON 对象)

fileSystem.root.getFile("filepathtoJSON", {creation:false}, function(fileEntry){
        fileEntry.file(function(file){
            var reader = new FileReader();
            reader.onloadend = function(e) {
               callback(JSON.parse(this.result));
            };
            reader.readAsText(file);
        }, errorHandler)
    }, errorHandler);

【讨论】:

  • 根据您链接的博客文章,FileSystem API 似乎“已死”!
  • @ccanduc 感谢您告诉我!尽管在撰写本文时我的辩护中并非如此,而且我不认为这会使我的答案无效(因为文件系统 API 存在问题),因为该公告是在不到一个月前发布的,并且我发布了4个月前。你的意见?为了确认您的评论 - 决定是 published April 24th, 2014 我不确定这对 Chrome 的实施意味着什么......看起来我将切换到 IndexedDB - 另一种仍在规范中的持久本地存储技术。跨度>
  • 我认为这是一个非常有价值的答案,特别是考虑到在回答时 FileSystem API 没有问题 - 我可能会建议在答案顶部添加一个粗体更新决定的链接 - 虽然只是个人意见:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多