簡體   English   中英

當我在瀏覽器中切換 Metamask 地址時,Web3 getAccounts 不會更新

[英]Web3 getAccounts doesn't update when I switch Metamask addresses in browser

我有一個連接到基本前端的節點應用程序,服務器中的get調用之一是獲取用戶的地址。 它第一次工作,但是,當我在網站的 Metamask 插件中手動切換地址/帳戶時,它不會更新,而是停留在舊地址上。

作為參考,我只是使用並連接到在我的筆記本電腦上打開的 ganache 測試網絡。

下面的相關代碼,首先是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; }
});

然后main.html頁面調用具有以下相關片段的client.js

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

第一次運行它記錄正確的地址,讓我在html頁面上顯示它。 但隨后我從 Metamask 中刪除了該帳戶,添加了一個不同的帳戶,然后重新啟動並刷新,它顯示了相同的舊帳戶。

此代碼不會更新 Metamask 中的帳戶更改的任何原因? 我怎樣才能解決這個問題? 非常感謝幫助。

TI 認為當瀏覽器下載任何東西時,它都會緩存,而 fetch() 也會緩存結果。 更改 fetch 的選項:

const response = await fetch(url, {
    method: 'GET',
    // this should invalidate caching
    cache: 'no-cache',     
    
  });

每次刷新頁面時,這都應該發出一個新請求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM