【问题标题】:How to achieve persistent storage in NeDB?NeDB如何实现持久化存储?
【发布时间】:2013-10-19 09:08:33
【问题描述】:

我在 node-webkit 中尝试了 NeDB,它在内存数据中运行良好,但无法存储在持久存储中。

【问题讨论】:

  • 你有什么错误吗?
  • 需要更多信息 - 你看过nedb db loading,特别是inMemoryOnly 和autoload 选项吗?
  • 最后我发现数据库是在包所在的其他目录中创建的:C:\Users\Dinesh\Programs\Node-Webkit\FrameLess nw.exe 位于:C:\Users \Dinesh\Programs\Node-Webkit\Package 数据库保存在某个奇怪的位置:C:\Users\Dinesh\AppData\Local\FrameLess\nedb-data
  • 有没有办法在 nw.exe 文件夹中创建数据库而不给出绝对路径或者是否有一个函数 node-webkit 到 nw.exe 的位置

标签: node.js node-webkit


【解决方案1】:

C:\Users\Dinesh\AppData\Local\FrameLess\nedb-data 是 node-webkit 解压缩应用程序的位置;这意味着您的应用程序已打包为.nw,这是一个更智能的 zip 文件。因此,它必须解压缩到 tmp 文件夹中才能执行,这就是您在 AppData 中找到您的数据库的原因。

在您的开发人员工具中,您始终可以通过键入:process.env 来了解您的应用已解压缩到哪个文件夹。您的 TMPDIR 属性是您的数据库所在的位置(TMPDIR 是 Mac OS X 属性,它在 Windows 上的名称可能不同)。

您可以在不打包的情况下执行您的nw 应用程序。基本上你可以把你的文件夹拖到nw.exe;或输入nw.exe yourAppFolder;或者像你一样将你的应用打包为.nw。

再次阅读以下指南:https://github.com/rogerwang/node-webkit/wiki/How-to-run-apps

【讨论】:

    【解决方案2】:

    绝对没有 node-webkit 或 nedb 专家,但我就是这样做的,而且效果很好。

    正如 mvanderw 在 cmets 中已经提到的,一定要检查自动加载选项。

    例如,这是我对一个简单的 node-webkit/ angular todo 应用程序的配置:

    var Datastore = require('nedb'),                                                                                                                                              
        path = require('path'),
        db = new Datastore({ filename: path.join(require('nw.gui').App.dataPath, 'todo.db'), autoload: true });
    

    当我重新启动应用程序时,所有待办事项仍然存在,我可以开始了。

    希望对你有帮助

    编辑: Scott 要求的示例

    var Datastore = require('nedb'), 
    path = require('path'),
    db = new Datastore({
      filename:path.join(require('nw.gui').App.dataPath, 'todo.db'),
      autoload: true
    }); 
    
    var todoServices = angular.module('todoServices', []);
    
    todoServices.factory('Todo', function($q) {
      return { 
        getAll: function(){ 
          var defer = $q.defer();
          db.find({ 
            //...some criteria
          },
          function(err, docs) {
            defer.resolve(docs);
          });
          return defer.promise;
        }, //...moar code
      }
    });
    

    这样的……

    【讨论】:

    • 您是否已经发布了您的待办事项应用程序的代码?我正在尝试将 nedb 与我的 node-webkit 应用程序集成,但缺乏功能示例确实限制了
    • ehm...也许可以问一个堆栈问题并链接到它,这样我就可以以正确的格式发布:)
    • 添加示例来回答:)
    猜你喜欢
    • 2011-11-13
    • 2023-03-19
    • 2011-09-07
    • 2010-12-31
    • 2022-01-27
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多