Problema con esportazioni NodeJS

di il
6 risposte

Problema con esportazioni NodeJS

Salve, ho due file js sotto NodeJS dove per passare una variabile da un file all'altro ho fatto exports.variabile e require("percorso del file") ecc. Il problema è che la variabile viene identificata nel file in cui voglio utilizzarla ma non viene passato il valore che gli ho assegnato nel file di partenza.Al suo posto con il console.log mi da Undefined. Ho notato che questo fatto avviene solo quando esporto anche un altra funzione e quindi con module.exports.funzione. Come posso fare per esportare questa funziona ma nel contempo anche la variabile interessata con il suo valore? Grazie per l'attenzione
Un esempio simile al mio caso:

//index.js
function funzione(server) {
   
const io = socket(server);

  io.on('connection', (socket) => {
    
   socket.on(.....);
   
        })
}

module.exports = funzione;  //cancellando questa riga il valore 3 viene passato senza problemi ma poi non posso disporre di server

exports.variabileCheNonVA=3



//app.js
const http = require('http')
const server = http.createServer(app)

const funzione = require('./index.js');

 funzione(server);
 
 console.log(funzione.variabileCheNonVa) //al posto della variabile mi da undifined nonostante l'IDE la identifica

6 Risposte

  • Re: Problema con esportazioni NodeJS

    Assegna a exports un oggetto che contenga tutti gli elementi che vuoi esportare.

    Ad esempio:
    
    module.exports = {
      miaFunzione: funzione,
      miaVariabile: 3
    }
    
    Nell'altro modulo, dovrai utilizzarli ovviamente nel modo corretto:
    
    const index = require('./index.js');
    index.miaFunzione();
    console.log(index.miaVariabile);
    
    Ciao!
  • Re: Problema con esportazioni NodeJS

    Ho utilizzato questo metodo solo che esporta il valore globale della variabile e non quello calcolato nella funzione. Si vede che l'esportazione avviene all inizio mentre il calcolo della mia variabile avviene dopo un po con setInterval. Per cui, c'è una sintassi che mi permette di eseguire le due esportazioni in due momenti diversi separatamente?? Perché ho provato a fare
    module.exports = {miaVariabile : miaVariabile} nella funzione subito dopo il calcolo lasciando a fine funzione
    module.exports = {miaFunzone : miaFunzione} ma in questo moto non si crea il collegamento con la variabile nel modulo dove devo esportarla.
  • Re: Problema con esportazioni NodeJS

    Ho risolto con questa istruzione module.exports.miaVariabile = miaVariabile. Scrivendo questa riga dopo il calcolo della variabile mi ha esportato il valore nel momento che mi serviva lasciando l'oggetto con la funzione come proprietà a fine funzione. Grazie
  • Re: Problema con esportazioni NodeJS

    McDuck37 ha scritto:


    Ho utilizzato questo metodo solo che esporta il valore globale della variabile e non quello calcolato nella funzione.
    Qui c'è un altro tipo di problema: se il valore è calcolato dalla funzione, allora deve essere restituito dalla funzione stessa.

    Se la funzione è asincrona, devi usare un callback o una Promise, o qualunque altro approccio che consenta di gestire questa condizione.

    Il problema non è relativo all'importazione e non puoi certamente dilazionarla, tantomeno farlo sull'export: non è questo il modo con cui si programma in Node.JS (o in JavaScript in generale), vedi le note di cui sopra.
  • Re: Problema con esportazioni NodeJS

    McDuck37 ha scritto:


    Ho risolto con questa istruzione module.exports.miaVariabile = miaVariabile. Scrivendo questa riga dopo il calcolo della variabile mi ha esportato il valore nel momento che mi serviva lasciando l'oggetto con la funzione come proprietà a fine funzione.
    Questa non è una risoluzione: è un escamotage che piega elementi che dovrebbero avere un ruolo preciso ad un funzionamento errato per sottostare a una architettura errata del codice. In futuro darà senz'alto problemi o porrà delle limitazioni tali per cui non si potrà modificare questa implementazione o sarà impossibile aggiungere altro.

    Ti invito a rivedere la programmazione asincrona in generale e il senso di exports.

    Ciao!
  • Re: Problema con esportazioni NodeJS

    Grazie per le risposte, terrò presente queste info per quando avrò problemi cosi mi andrò a studiare gli argomenti.
Devi accedere o registrarti per scrivere nel forum
6 risposte