我有一个由 express 生成器生成的 node.js 应用程序。我想使用 Metamask 插件注入的 web3 对象,但是当我尝试 console.log(process.web3) 时,它是未定义的。当我在浏览器的开发者控制台中输入 window.web3 时,它会返回 web3 对象。
有谁知道何时注入 web3 对象以及在快速应用程序中我可以分配类似
var web3 = process.web3;
您是在尝试使用 web3.js 服务器端(在 Node.js 中)还是客户端(在浏览器中)?看起来你把这两种情况混在一起了。
客户端 web3.js 在浏览器加载 JS 库时初始化。通常,如果您使用类似的东西,$(document).ready()
您将能够访问它。
但是,服务器端 web3.js 需要隐式初始化。
你有没有尝试以下?我用它连接到由 metamask 注入的 web3。
import { default as Web3} from 'web3';
...
window.addEventListener('load', function() {
// Checking if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof web3 !== 'undefined') {
console.warn("Using web3 detected from external source. If you find that your accounts don't appear or you have 0 MetaCoin, ensure you've configured that source properly. If using MetaMask, see the following link. Feel free to delete this warning. :) http://truffleframework.com/tutorials/truffle-and-metamask")
// Use Mist/MetaMask's provider
window.web3 = new Web3(web3.currentProvider);
} else {
console.warn("No web3 detected. Falling back to http://127.0.0.1:8545. You should remove this fallback when you deploy live, as it's inherently insecure. Consider switching to Metamask for development. More info here: http://truffleframework.com/tutorials/truffle-and-metamask");
// fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
window.web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545"));
}
});
希望这可以帮助