Tengo una aplicación de nodo que se conecta a una interfaz básica y una de las llamadas en el servidor es get la dirección del usuario. Funciona la primera vez, sin embargo, cuando cambio manualmente las direcciones/cuentas en el complemento Metamask para el sitio web, no se actualiza y permanece en la dirección anterior.
Como referencia, simplemente estoy usando y conectándome a una red de prueba de ganache abierta en mi computadora portátil.
Código relevante a continuación, primero el server.js :
const express = require('express') const app = express() const port = 3000 const Web3 = require('web3'); const WEB3_PROVIDER = "HTTP://127.0.0.1:7545" if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); console.log("web3 already initialized."); } else { // set the provider you want from Web3.providers web3 = new Web3(new Web3.providers.HttpProvider(WEB3_PROVIDER)); console.log("New web3 object initialized."); } app.get('/', (req, res) => { res.sendFile('./main.html', { root: __dirname }); }) app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) }) app.get('/get-account', async (_req, res) => { try { web3.eth.getAccounts().then(function(accs){ this_acc = accs[0]; console.log("account :: "); console.log(this_acc); return res.send(this_acc); }) } catch (e) { throw e; } }); Luego, la página main.html llama a client.js , que tiene el siguiente fragmento relevante:
async function updateUserAddr() { console.log("updateUserAddr"); const response = await fetch('/get-account'); var addr_str = await response.text(); console.log(addr_str); $('#address_id_poster').text(addr_str); } updateUserAddr();La primera vez que lo ejecuto, registra la dirección correcta, permitiéndome mostrarla en la página Html. Pero luego elimino esa cuenta de Metamask, agrego una diferente, y reinicio y actualizo y muestra la misma cuenta anterior.
¿Alguna razón por la cual este código no actualizaría el cambio de cuenta en Metamask? ¿Cómo puedo arreglar esto? La ayuda es muy apreciada.
Creo que cuando el navegador descarga algo, lo almacena en caché y fetch() también almacena en caché el resultado. Cambia las opciones de fetch:
const response = await fetch(url, { method: 'GET', // this should invalidate caching cache: 'no-cache', });Esto debería hacer una nueva solicitud cada vez que actualice la página