gpt4 book ai didi

javascript - NeDB 未加载或存储到文件

转载 作者:行者123 更新时间:2023-11-30 00:00:46 25 4
gpt4 key购买 nike

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

最佳答案

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

  1. NeDB API 不允许 JSON 输入。您必须放入一个 javascript 对象。当您使用 JSON 输入时,不会返回任何错误,也不会保留任何内容。
  2. 'null' 在回调中作为错误返回,表示没有问题发生。当保存第一个 JSON 文档时,它使用“undefined”键进行索引,因为当 obj 只是一个(JSON)字符串时,NeDB 调用“key = obj[fieldname[0]]”返回“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));
});

也许它对某人有帮助。 :)

关于javascript - NeDB 未加载或存储到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40650701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com