javascript - Hur isolerar man en Gunjs-databas?
Jag har provat GunJs i några dagar nu och jag tycker verkligen om det. Som ett startprojekt har jag följt Fireship-chatdapp-videon som syftar till att bygga din egen chatt.
Här är problemet, nu när jag har avslutat handledningen vill jag skapa min egen chatt. Men av någon anledning, om jag får en 'chatt'-nod inom min egen app verkar det som att den plockar upp samma 'chatt'-nod som handledningsversionen som är online.
onMount(() => {
// Get Messages in large chat
db.get('chat')
.map()
.once(async (data, id) => {
if (data) {
// key for E2E - to do: change for web3
const key = '#foo';
var message = {
//transform the data
who: await db.user(data).get('alias'),
what: (await SEA.decrypt(data.what, key)) + '',
when: GUN.state.is(data, 'what'),
};
if (message.what) {
messages = [...messages.slice(-100), message]
}
}
})
})
Detta är också fallet om jag ändrar krypteringsnyckeln (då blir meddelandena bara odefinierade). Flera frågor uppstår från detta:
- Är graph-namn unika inom hela GunDb?
- Hur hanterar du konflikter där två vapenbaserade appar använder samma nodnamn?
- Löses detta problem i allmänhet genom filtrering med hjälp av 'header'-egenskaper?
- Hur får jag det att bara ta upp mina data?
Även om jag har läst de flesta av dokumenten verkar det som om det finns något jag missar i min förståelse av hur grafen generellt delas mellan appar. Alla insikter om hur detta fungerar skulle vara mycket uppskattade.
Svar #1
Är grafnoder namn unika inom hela GunDb?
Ja.
Hur hanterar du konflikter där två pistelbaserade appar använder samma nodnamn?
Du gör inte det. Det förväntade resultatet kommer att bli att de skriver över varandra.
Löses detta problem i allmänhet genom filtrering med hjälp av 'header'-egenskaper?
Jag tror inte att det är rätt sätt att göra det på.
Hur får jag det att bara uppmärksamma mina data?
Använd din egen reläserver.
Slutsats: gunDB bryr sig egentligen inte om vem som hämtar/lägger in datan. Om du vill skydda din data, använd din egen reläserver (inte en offentlig), och lägg datan i ditt användarutrymme. Användarutrymmet är skrivskyddat för allmänheten, men kan läsas/skrivas av ägaren.