2016-02-01 2 views
3

Я пытаюсь сделать gun.js Я установил его как проект node.js, я настроил ведро Amazon S3 через dotenv и я попытался добавить файл data.json, и все же я не могу получить gun.js, чтобы сохранить файл локально или ведро S3.Gun.js почему я получаю сообщение об ошибке «У вас нет слоя сохранения для сохранения в ошибке»

Я знаю его ранние дни для оружия, но у меня такое чувство, что я пропускаю что-то очевидное.

Я ожидаю найти файл .json в локальной файловой системе и в ведомости S3, но я не получаю ни того, ни другого.

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

ответ

3

@bill Просто заметил это сейчас, жаль поздний ответ. Спасибо @ paul-w за то, что уведомил об этом и его ответе сегодня.

Этот вопрос и ответ предполагает, что вы используете версию EARLIER, чем v0.4.x!

Если вы находитесь в NodeJS и получаете ошибку “You have no persistence layer to save to”, это означает, что драйвера хранения по умолчанию (S3, file.js) не получил установленное или были деактивированы - что необычно, так как это происходит автоматически.

  1. Попытка установки пистолета (снова?) Через npm install gun в вашей местной NodeJS директории проекта, а не мерзавец клон или копию & пасты.

Я могу только догадываться, учитывая контекст, который вы объясните, что вы могли бы скопировать/перенести пушку (например, файл gun.js) в ваш проект. Браузер будет работать только с одним файлом, но NodeJS нужно больше - ему нужны модули S3/file.js, которые будут включены, если они установлены с помощью npm или правильно клонированы git.

Также маловероятно (так как ваш код не отображается это), если вам случится (это плохо) Gun({wire: {put: null, get: null}}) (или нечто подобное), он будет намеренно нарушать водителей сохраняемости.

Если вы находитесь в браузере и получаю ошибку (и предполагая, вы не перезаписывать драйверы сохраняемости, как и в предыдущем абзаце), это может быть из-за какой-то странной ситуации, как вы используете старую версию IE или браузер, который не поддерживает JSON. Опять же, все это маловероятно, но я просто хочу быть всеобъемлющим.

Примечание: вышеизложенное относится к вопросу в вашем названии. Однако ваш фактический вопрос не спрашивает об ошибке, он просит о том, чтобы не видеть данные в data.json или в S3. Отвечая на это ниже.

На что @ paul-w больше на пути. Если вы используете S3, то модуль file.js (data.json) автоматически деактивирует себя. Если вы используете модуль file.js (data.json), то S3 не активируется. Как упоминалось в @ paul-w, v0.4.x будет легко поддерживать несколько систем хранения одновременно. Тем не менее, вы должны видеть свои данные хотя бы одним или другим - если только вы не получаете ошибку «отсутствие персистентности», и в этом случае вы не увидите ваши данные нигде, потому что нет никакой настойчивости! Но опять же, уровни персистентности по умолчанию включены в пистолет по умолчанию (если установка не была неправильной или вы явно перезаписывали их - как необычные вещи).

Надеюсь, это ответит на ваш вопрос. Извините, я не видел его до сих пор. Пожалуйста, дайте мне знать, если это работает, а также присоединитесь к разговору на https://gitter.im/amark/gun. Благодарим вас за помощь в решении вопросов, связанных с stackoverflow! Нам нужно больше!

+0

Мне любопытно, в чем дело, что это был ответ? – marknadal

2

Я думаю, что Марк собирается ответить на этот вопрос более официально, но быстрый ответ, что в gun.js 0,3 (ток) есть один пистолет сервер сверстников или хранение цель, и при запуске пушки как сервера (например, из node.js, а не браузера), S3 является предпочтительным, если указаны учетные данные S3. Но пистолет также сохраняет ваши изменения данных в памяти браузера или localStorage (до предела браузера 5 МБ), а S3 - для более постоянного хранилища.

Так что в приведенном выше примере, я думаю, проблема в том, что запись файла будет использоваться только в том случае, если есть проблема с сохранением изменений в S3, и именно поэтому вы не видите новых данных, которые там происходят. Возможно, попробуйте поместить ошибку в учетные данные S3 (например, добавьте «x» на данный момент) и посмотрите, начнет ли она вместо этого использовать путь к файлу.

В gun.js 0.4 планируется использовать все одноранговые узлы, указанные в конструкторе, или динамически, но этой функции пока нет.

(И я, вероятно, разделывали этот ответ, но, надеюсь, Марк может исправить любые неточности в этом. Я новичок в gun.js, но был один и тот же вопрос.)

Смежные вопросы