3

我无法让最简单的 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
});

4

2 回答 2

4

尽管这个问题已经很老了,但我想与面临类似问题的任何人分享我的经验。

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

尝试

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 回答
0

这个问题已经很老了,但是由于我遇到了非常相似的问题,我想我会为面临类似问题的任何人写下我的解决方案。

就我而言,我正在使用 electron-webpack 作为应用程序构建器来编写 Electron 应用程序。事实证明,Webpack 加载的 NeDB 是在浏览器模式下运行的,无法访问文件系统。

为了让它工作,我不得不改变导入语句:

import DataStore from 'nedb';

对此:

const DataStore = require('nedb');

我还必须将 NeDB 作为外部模块添加到 Webpack 配置中(在 package.json 中):

"electronWebpack": {
    "externals": {
        "nedb": "commonjs nedb"
    }
}

我在 NeDB github 页面上找到了这个解决方案:https ://github.com/louischatriot/nedb/issues/329

于 2019-05-08T10:44:12.047 回答