3

NeDB の最も単純な例を正しく実行することができません。私のコードはメモリ内でのみ機能し、ファイルへの永続性はエラー メッセージなしで失敗し続けます。

loaddatabase および insert イベントのエラー コールバックは常に null 参照をエラーとして渡すため、そこには情報がありません。奇妙なことに、この問題を抱えている人は他にいないので、ここで何かが欠けていると思います。すべての助けに感謝します。

コードは次のとおりです。

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

4

2 に答える 2

4

この質問はかなり古いものですが、同様の問題に直面している人のために私の経験を共有したいと思います.

  1. NeDB API は JSON 入力を許可しません。JavaScript オブジェクトを配置する必要があります。JSON 入力を使用すると、エラーは返されず、何も保持されません。
  2. 'null' はコールバックでエラーとして返され、問題が発生しなかったことを示します。最初の JSON ドキュメントを保存すると、obj が単なる (JSON) 文字列の場合、NeDB が「key = obj[fieldname[0]]」を呼び出し、「undefined」を返すため、「undefined」キーでインデックスが作成されます。残念ながらエラーは返されません。2 番目のドキュメントを挿入すると、キー「未定義」が既に取得されているため、コールバックで一意の制約違反エラーが発生します。とにかく、何も持続しません。

試す

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

多分それは誰かを助けるでしょう。:)

于 2017-10-01T02:41:39.367 に答える