Ya no puedo conectarme a mi nodo local usando web3

Comienzo mi nodo local usando el siguiente comando:

geth --datadir  "D:\EthereumLocalNode" --networkid 1114 console 2>>  "D:\EthereumLocalNode\myLog.log" --rpc --rpccorsdomain "*" --nodiscover --nodekey boot.key

y hasta hace 2 semanas, pude conectarme con éxito y consultar mi cadena de bloques en el navegador Chrome usando:

web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
abi = JSON.parse('.....myContract abi here.....');
myContract = web3.eth.contract(abi);
contractInstance = myContract.at('...My Contract address in bc...');

Ahora recibo el siguiente error en la herramienta de desarrollo de Chrome:

Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'null' that is not equal to the supplied origin. Origin 'null' is therefore not allowed access.

Sin embargo, aún puedo conectarme a este nodo y enviar transacciones usando remix, o con un script js que ejecuto con nodejs que puede realizar transacciones exactamente en el mismo nodo aún usando web3, que en la primera línea comienza con:

Web3 = require('web3');
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

y esto funciona bien.

Así que supongo que algo ha cambiado en la forma en que funciona Chrome desde las últimas una o dos actualizaciones.

Hay personas que se quejan de las últimas actualizaciones de Chrome sobre algo que ha cambiado con CORS. De todos modos, no sé qué hacer con CORS o cómo cambiar su configuración.

Realmente necesito:

  • cambiar la forma en que inicio mi nodo?
  • cambiar algo en la configuración de Chrome?
  • o agregue algunas líneas a mi código javascript que uso en mi html.

Me alegraría si alguien me ayudara aquí.

Respuestas (1)

El preflighterror está relacionado con CORS como dijiste.

Solucioné este error respondiendo la OPTIONSsolicitud con un 200código mientras configuraba los encabezados para corregir el formulario.

en mi aplicación Express usé esto:

router.route("/*").options(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With, X-Auth");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST,DELETE");
    res.status(200).send();
});

dónde :

var express = require('express');
var router = express.Router();

Realmente no es una buena idea hacer lo que hice si estás en un entorno de producción.

O puede instalar la extensión de cromo allow origin de allow control.