2016-11-17 239 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)); 
 
});

也許它可以幫助別人。 :)