2016-11-17 237 views
0

我无法获得NeDB最简单的例子来正常运行。我的代码只在内存中运行,持久性文件在没有任何错误消息的情况下保持失败。NeDB未加载或存储到文件

loaddatabase和insert事件的错误回调函数总是传递一个空引用作为错误,所以在那里没有任何信息。奇怪的是,似乎没有其他人有这个问题,所以我想我在这里错过了一些东西。所有的帮助非常感谢。

下面是代码:

var Datastore = require('nedb'), db = new Datastore({ filename: 'test.db' }); 
 

 
db.loadDatabase(function (err) { 
 
    alert(err); // err is null, with the autoload flag no error is thrown either 
 
}); 
 

 
var doc = { hello: 'world'}; 
 

 
db.insert(doc, function (err, newDoc) { 
 
    alert(err); // err is null here as well. Doc will be in the memory storage but no persisted to file 
 
});

+0

它工作正常。在所有情况下。 –

+0

我在创建电子包后面临同样的问题。 –

回答

0

虽然这个问题是很老,我想分享我的经验,任何人都面临着类似的问题。

  1. NeDB API不允许JSON输入。你必须放入一个JavaScript对象。当您使用JSON输入时,不会返回任何错误,也不会有任何内容持续存在。
  2. 'null'作为回调中的错误返回,表示没有问题发生。当保存第一个JSON文档时,它使用'undefined'键进行索引,因为当obj只是一个(JSON)字符串时,NeDB会调用'key = obj [fieldname [0]]'返回'undefined'。不幸的是没有错误返回。插入第二个文档将导致回调中唯一的约束违规错误,因为已经采用了“undefined”键。总之,什么都不会持久。

尝试

var Datastore = require('nedb'), db = new Datastore({ filename: 'test.db' }); 
 

 
db.loadDatabase(function (error) { 
 
    if (error) { 
 
     console.log('FATAL: local database could not be loaded. Caused by: ' + error); 
 
     throw error; 
 
    } 
 
    console.log('INFO: local database loaded successfully.'); 
 
}); 
 

 
// creating the object with new, just to make it clear. 
 
// var doc = {hello: 'world'}; should work too. 
 
function myDoc(greeting) 
 
{ 
 
    this.hello=greeting; 
 
} 
 
var doc = new myDoc('world'); 
 

 
db.insert(doc, function (error, newDoc) { 
 
    if (error) { 
 
    console.log('ERROR: saving document: ' + JSON.stringify(doc) + '. Caused by: ' + error); 
 
    throw error; 
 
    }  
 
    console.log('INFO: successfully saved document: ' + JSON.stringify(newDoc)); 
 
});

也许它可以帮助别人。 :)