Gun.js 为什么我会收到错误 "You have no persistence layer to save to error"
Gun.js why do I get the error "You have no persistence layer to save to error"
我正在尝试 gun.js 我已经将它安装为 node.js 项目,我已经通过 dotenv 配置了 amazon S3 存储桶,我已经尝试添加一个 data.json 文件我仍然无法 gun.js 将文件保存在本地或 S3 存储桶中。
我知道枪支还处于早期阶段,但我觉得我遗漏了一些明显的东西。
我希望在本地文件系统和/或 S3 存储桶中找到一个 .json 文件,但我都找不到。
require('dotenv').config();
var Gun = require('gun');
var gun = Gun({
file: 'data.json', // local testing and development
s3: {
key: process.env.AWS_KEY, // AWS Access Key
secret: process.env.AWS_SECRET, // AWS Secret Token
bucket: process.env.AWS_BUCKET // The bucket you want to save into
}
});
gun.put({ hello: 'world' }).key('my/first/data');
我认为 Mark 会更正式地回答这个问题,但快速回答是在 gun.js 0.3(当前)中有一个枪支服务器对等或存储目标,当你 运行 gun 作为服务器(例如来自 node.js 而不是浏览器),如果指定了 S3 凭据,则首选 S3。但是 gun 还会将您的数据更改保存在浏览器内存或 localStorage(最多 5MB 的浏览器限制)中,而 S3 用于更永久的存储。
所以在上面的示例中,我认为问题在于只有在将更改保存到 S3 时出现问题时才会使用文件条目,这就是为什么您看不到新数据到那里的原因。也许尝试在 S3 凭据中输入错误(例如,现在添加 'x')并查看它是否开始使用文件路径。
在 gun.js 0.4 中,计划使用构造函数中或动态指定的所有对等点,但该功能尚未出现。
(我可能把那个答案搞砸了,但希望马克能纠正其中的任何不准确之处。我是 gun.js 的新手,但也有同样的问题。)
@bill 现在才注意到这一点,很抱歉回答晚了。感谢@paul-w 今天早些时候通知我这件事和他的回应。
此问答假设您 运行 版本早于 v0.4.x!
如果您在 NodeJS 中并收到错误 “You have no persistence layer to save to”
,这意味着默认存储驱动程序(S3,file.js)没有得到安装或停用 - 这是不寻常的,因为这是自动发生的。
- 尝试通过
npm install gun
在本地 NodeJS 项目目录中安装 gun(再次?),而不是 git 克隆或复制粘贴。
根据您解释的上下文,我只能猜测您的项目中可能有 copied/moved 枪(如 gun.js
文件)。浏览器将只处理单个文件,但 NodeJS 需要更多 - 它需要 S3/file.js 模块,如果使用 npm 安装或正确 git 克隆,将包含这些模块。
也不太可能(因为你的代码没有显示这个),如果你碰巧(这很糟糕)Gun({wire: {put: null, get: null}})
(或类似的东西)它会故意破坏持久性驱动程序。
如果您 在浏览器中 并收到错误(假设您没有像上一段中那样覆盖持久性驱动程序),则可能是因为某些奇怪的情况,例如您使用的是旧版 IE 或不支持 JSON 的浏览器。同样,所有这些都是不太可能,但我只是想全面。
Note: The above applies to the question in your title. However your actual question doesn't ask about the error, it asks about not seeing data in data.json
or in S3. Answering that below.
@paul-w 更符合轨道。如果您使用的是 S3,那么 file.js 模块 (data.json) 会自动停用。如果您使用的是 file.js 模块 (data.json),则 S3 不会被激活。正如@paul-w 提到的,v0.4.x 将支持轻松地同时拥有多个存储引擎。但是,您应该至少在一个或另一个中看到您的数据 - 除非您收到 "no persistence layer" 错误,在这种情况下,您将不会在任何地方看到您的数据,因为没有任何持久性!但同样,默认持久层默认包含在 gun 中(除非安装不正确,或者您明确覆盖它们 - 都是不寻常的事情)。
我希望这能回答您的问题。抱歉我到现在才看到。请让我知道这是否有效,并加入 https://gitter.im/amark/gun 的对话。感谢您帮助启动 Whosebug 问题!我们需要更多这些!
我正在尝试 gun.js 我已经将它安装为 node.js 项目,我已经通过 dotenv 配置了 amazon S3 存储桶,我已经尝试添加一个 data.json 文件我仍然无法 gun.js 将文件保存在本地或 S3 存储桶中。
我知道枪支还处于早期阶段,但我觉得我遗漏了一些明显的东西。
我希望在本地文件系统和/或 S3 存储桶中找到一个 .json 文件,但我都找不到。
require('dotenv').config();
var Gun = require('gun');
var gun = Gun({
file: 'data.json', // local testing and development
s3: {
key: process.env.AWS_KEY, // AWS Access Key
secret: process.env.AWS_SECRET, // AWS Secret Token
bucket: process.env.AWS_BUCKET // The bucket you want to save into
}
});
gun.put({ hello: 'world' }).key('my/first/data');
我认为 Mark 会更正式地回答这个问题,但快速回答是在 gun.js 0.3(当前)中有一个枪支服务器对等或存储目标,当你 运行 gun 作为服务器(例如来自 node.js 而不是浏览器),如果指定了 S3 凭据,则首选 S3。但是 gun 还会将您的数据更改保存在浏览器内存或 localStorage(最多 5MB 的浏览器限制)中,而 S3 用于更永久的存储。
所以在上面的示例中,我认为问题在于只有在将更改保存到 S3 时出现问题时才会使用文件条目,这就是为什么您看不到新数据到那里的原因。也许尝试在 S3 凭据中输入错误(例如,现在添加 'x')并查看它是否开始使用文件路径。
在 gun.js 0.4 中,计划使用构造函数中或动态指定的所有对等点,但该功能尚未出现。
(我可能把那个答案搞砸了,但希望马克能纠正其中的任何不准确之处。我是 gun.js 的新手,但也有同样的问题。)
@bill 现在才注意到这一点,很抱歉回答晚了。感谢@paul-w 今天早些时候通知我这件事和他的回应。
此问答假设您 运行 版本早于 v0.4.x!
如果您在 NodeJS 中并收到错误 “You have no persistence layer to save to”
,这意味着默认存储驱动程序(S3,file.js)没有得到安装或停用 - 这是不寻常的,因为这是自动发生的。
- 尝试通过
npm install gun
在本地 NodeJS 项目目录中安装 gun(再次?),而不是 git 克隆或复制粘贴。
根据您解释的上下文,我只能猜测您的项目中可能有 copied/moved 枪(如 gun.js
文件)。浏览器将只处理单个文件,但 NodeJS 需要更多 - 它需要 S3/file.js 模块,如果使用 npm 安装或正确 git 克隆,将包含这些模块。
也不太可能(因为你的代码没有显示这个),如果你碰巧(这很糟糕)Gun({wire: {put: null, get: null}})
(或类似的东西)它会故意破坏持久性驱动程序。
如果您 在浏览器中 并收到错误(假设您没有像上一段中那样覆盖持久性驱动程序),则可能是因为某些奇怪的情况,例如您使用的是旧版 IE 或不支持 JSON 的浏览器。同样,所有这些都是不太可能,但我只是想全面。
Note: The above applies to the question in your title. However your actual question doesn't ask about the error, it asks about not seeing data in
data.json
or in S3. Answering that below.
@paul-w 更符合轨道。如果您使用的是 S3,那么 file.js 模块 (data.json) 会自动停用。如果您使用的是 file.js 模块 (data.json),则 S3 不会被激活。正如@paul-w 提到的,v0.4.x 将支持轻松地同时拥有多个存储引擎。但是,您应该至少在一个或另一个中看到您的数据 - 除非您收到 "no persistence layer" 错误,在这种情况下,您将不会在任何地方看到您的数据,因为没有任何持久性!但同样,默认持久层默认包含在 gun 中(除非安装不正确,或者您明确覆盖它们 - 都是不寻常的事情)。
我希望这能回答您的问题。抱歉我到现在才看到。请让我知道这是否有效,并加入 https://gitter.im/amark/gun 的对话。感谢您帮助启动 Whosebug 问题!我们需要更多这些!