2013-10-11 40 views
2

我尝试了node-webkit中的NeDB,它在内存数据中工作正常,但无法存储在持久存储中。如何在NeDB中实现持久性存储?

+0

你得到任何错误? – robertklep

+0

需要更多信息 - 你看过[nedb db loading](https://github.com/louischatriot/nedb#creatingloading-a-database),特别是'inMemoryOnly'和'autoload'选项吗? –

+0

最后我发现数据库是在其他目录下创建的 该软件包位于:C:\ Users \ Dinesh \ Programs \ Node-Webkit \ FrameLess nw.exe位于:C:\ Users \ Dinesh \ Programs \ Node-Webkit \ Package 数据库被保存在一些奇怪的位置:C:\ Users \ Dinesh \ AppData \ Local \ FrameLess \ nedb-data – Dinesh

回答

5

肯定没节点的WebKit或nedb专家,但我这是如何做到的,它的工作。

正如mvanderw在评论中已经提到的那样,绝对要确保检查autoload选项。

这是比如我一个简单的节点的WebKit /角待办事项应用程序配置:

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

当我重新启动应用程序,所有的待办事项仍然存在,我已经准备好了。

希望这有助于

编辑: 例斯科特的要求

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 
    } 
}); 

事情是这样的......

+0

有没有机会发布您的待办事项应用程序的代码?我正在尝试将nedb与我的node-webkit应用程序集成在一起,并且缺少正常运行的示例实际上是限制 – Scott

+1

ehm ...也许问一个Stack问题并链接到它,以便我可以用适当的格式发布:) – flaky

+0

新增示例:) – flaky

1

C:\Users\Dinesh\AppData\Local\FrameLess\nedb-data是其中node-webkit未压缩的应用程序;这意味着您的应用程序已被封装为.nw,这是一个更智能的zip文件。因此,它必须解压缩到一个tmp文件夹才能执行,这就是为什么你在AppData找到你的db。

在您的开发人员工具中,您始终可以通过键入以下内容来知道您的应用程序已解压到哪个文件夹: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