Estoy tratando de exportar una variable desde un archivo, pero cuando lo requiero en otro, me sale indefinido. Sospecho que mis funciones lo están causando, pero no estoy seguro de cómo solucionarlo.
Índice.js:
app.post("/", (req,res) =>{ console.log("Get from /"); module.exports.SimpleMessage = 'Hello world'; //exporting variable exec('npx hardhat run scripts/deploy.js --network goerli', (error, stdout, stderr) => { if (error !== null) { console.log(`exec error: ${error}`); } }); res.send("Server received the request"); }); // starting the server app.listen(3000, () => { console.log('listening on port 3000'); });Implementar.js:
async function main() { const HelloWorld = await ethers.getContractFactory("HelloWorld"); var msg = require('../src/index.js'); //requiring variable console.log(msg.SimpleMessage); const hello_world = await HelloWorld.deploy(); }(Editar) Esta es toda la función Deploy.js:
async function main() { const HelloWorld = await ethers.getContractFactory("HelloWorld"); var msg = require('../src/index.js'); //requiring variable console.log(msg.SimpleMessage); const hello_world = await HelloWorld.deploy(); } main() .then(() => process.exit(0)) .catch(error => { console.error(error); process.exit(1); });así que hay algunas cosas para desenvolver aquí:
su require() probablemente se invoque antes module.exports.SimpleMessage = 'Hello world'; - un problema fácil de encontrar cuando se trata de funciones asíncronas
require() se implementa de tal manera que si lo llama dos veces con el mismo archivo, la segunda vez solo se devuelve el valor almacenado en caché y, por lo tanto, si el valor de SimpleMessage cambia, ya no podrá importarlo. . En su lugar, solo se devolverá el valor original.
Una solución rápida y simple es exportar un valor que no cambiará, como una función
let SimpleMessage; module.exports.getSimpleMessage = () => SimpleMessage; app.post("/", (req,res) =>{ console.log("Get from /"); SimpleMessage = 'Hello world'; // and the rest of your logic }); en este punto, puede hacer referencia getSimpleMessage que se almacenará en caché mediante require() pero aún así siempre devolverá la versión actualizada de SimpleMessage