Я работаю над проектом node.js, используя libp2p для обнаружения одноранговых узлов . Моя кодовая база работает на двух машинах, подключенных к моей локальной сети. Они обнаруживают друг друга, подключаются друг к другу и сохраняют сведения о соединении в объекте Map, называемом DiscoverPeers. У меня есть несколько операторов журнала консоли для отслеживания значения DiscoverPeers. Карта содержит именно то, что я ожидал, пока я не попытаюсь получить доступ к этому объекту карты из дополнительного модуля. Затем он сразу же показывает, что он пуст, несмотря на то, что оператор журнала непосредственно перед этим показывает, что он содержит 3 записи.
Соответствующие модули:
peerState - Объявляет обнаруженную карту сверстников
Код: Выделить всё
console.log('Initializing peerState...');
export const discoveredPeers = new Map();
export const connectedPeers = new Map();
Код: Выделить всё
export const getAllDiscoveredPeers = async () => discoveredPeers;
export const updatePeerPublicKey = async (peerId, publicKey) => {
if (discoveredPeers.has(peerId)) {
discoveredPeers.get(peerId).publicKey = publicKey;
console.log('Updated peer publicKey');
console.log('Discovered Peers @ updatePeerPublicKey: ', discoveredPeers)
}
};
export const getPeerByPublicKey = async (publicKey) => {
console.log('Discovered Peers @ getPeerByPublicKey:', discoveredPeers);
for (const [peerId, peerData] of discoveredPeers) {
if (peerData.publicKey === publicKey) {
return {peerId, ...peerData}; // Return the whole peer object
}
}
return null; // Return null if no peer with that publicKey is found
};
Код: Выделить всё
case MESSAGE_TYPES.PEER.RESPONSE:
console.log('Received PEER_RESPONSE');
if (message.actionType === ACTION_TYPES.PEER.RESPONSE_PUBLIC_KEY) {
console.log('Received PEER_RESPONSE_PUBLIC_KEY: ', message.payload.publicKey);
const peerId = message.meta.sender;
const publicKey = message.payload.publicKey;
**await peerStateManager.updatePeerPublicKey(peerId, publicKey);**
}
break;
Код: Выделить всё
exports.getSynapseUserPosts = async (req, res) => {
**console.log('Discovered Peers in getSynapseUserPosts: ', await getAllDiscoveredPeers());**
const handle = req.query.handle;
const synapsePublicKey = req.query.publicKey;
const {peerId} = await getPeerByPublicKey(synapsePublicKey);
...more definition
}
CONSOLE OUTPUT:
Код: Выделить всё
Updated peer publicKey
Discovered Peers @ updatePeerPublicKey: Map(3) {
'12D3KooWM2YGTyBb11aPdWHbDarzpmDLp3FpAPQbqFKHWjAtJrpm' => {
publicKey: '0315e1f282db55a243b70c8030dc4e4a1fe9fff45dbe82f1e5f1ae6638b6e3ff49',
multiaddrs: [
'/ip4/192.168.1.188/tcp/4001'
]
},
'12D3KooWJtLJ3Z5YM855gxsWDnEFHhATAPTGMBQDQGYjh3icFsbs' => {
publicKey: null,
multiaddrs: [
'/ip4/192.168.1.253/tcp/4001/p2p/12D3KooWJtLJ3Z5YM855gxsWDnEFHhATAPTGMBQDQGYjh3icFsbs'
]
},
'12D3KooWEESBm7xFdo35dGnbjY5LZVnWvbn1JS51Kc71ooGkcWNr' => {
publicKey: null,
multiaddrs: [
'/ip4/192.168.1.188/tcp/4001/p2p/12D3KooWEESBm7xFdo35dGnbjY5LZVnWvbn1JS51Kc71ooGkcWNr'
]
}
}
Discovered Peers in getSynapseUserPosts: Map(0) {}
Discovered Peers @ getPeerByPublicKey: Map(0) {}
/Users/enki/Developer/Repositories (Version Controlled)/meNexus-platform/synapse/api/src/controllers/synapseController.js:14
const {peerId} = await getPeerByPublicKey(synapsePublicKey);
^
TypeError: Cannot destructure property 'peerId' of '(intermediate value)' as it is null.
Буду очень признателен за любую помощь, так как я просто застрял на этой карте.
Я счастлив при необходимости ответить на уточняющие вопросы. Я изо всех сил пытаюсь задать свой вопрос изящно, поэтому заранее извиняюсь, если мой пост будет тарабарщиной. Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -access-it
Мобильная версия