ReferenceError: venster is niet gedefinieerd bij object. <anoniem> Node.js

Ik heb soortgelijke vragen gezien die hier zijn gesteld, maar geen enkele komt overeen met mijn situatie. In mijn web heb ik 3 JavaScript-bestanden: client.js, server.js, myModule.js. In client.jsmaak ik een venstervariabele aan met de naam windowVaren voeg ik er enkele attributen aan toe. In myModule.jsvoeg ik enkele andere attributen toe en gebruik ze daar en ik exporteer het bestand en eis het in server.js.

client.js:

window.windowVar= {
    func1: function(args) {    
       //some sode here
    },
    counter:0
};

myModule.js:

module.exports={wVar:windowVar, addMessage ,getMessages, deleteMessage};
windowVar.serverCounter = 0;
windowVar.arr1=[];

server.js:

var m= require('./myModule');

bij het uitvoeren van de server in node.js krijg ik de volgende foutmelding:

ReferenceError: venster is niet gedefinieerd bij object. <anonymous>

Zoals ik heb begrepen is window een browsereigenschap, maar hoe kan ik de fout in dit geval oplossen? Alle hulp wordt gewaardeerd


Antwoord 1, autoriteit 100%

windowis een browser-ding dat niet bestaat op Node.

Als je echt een globalwilt maken, gebruik dan global:

global.windowVar = /*...*/; // BUT PLEASE DON'T DO THIS, keep reading

globalis de identifier van Node voor het globale object, zoals windowin browsers is.

Maar, het is niet nodig om echt globale variabelen te maken in Node-programma’s. Maak in plaats daarvan gewoon een globale module:

var windowVar = /*...*/;

…en aangezien u het opneemt in uw exports, hebben andere modules indien nodig toegang tot het object waarnaar het verwijst.


Antwoord 2, autoriteit 40%

Ik heb zoiets als dit gebruikt en het beschermt tegen de fout:

let foo = null;
if (typeof window !== "undefined") {
  foo = window.localStorage.getItem("foo");
}

Antwoord 3, autoriteit 11%

windowobject is alleen aanwezig in de context van browser. Bij het uitvoeren van een applicatie op nodejsis er geen windowobject beschikbaar. Als u uw variabelen of functies over meerdere bestanden wilt delen, moet u requireen exports

gebruiken

client.js

module.exports = {
    fun1: function(){
    },
    counter: 0 
}

en zoiets in myModule.js

var client = require('./client');

Antwoord 4

Voor node.js worden de hoofdvensterobjecten globaal genoemd. Gebruik het gewoon als volgt:

const example = {
  some: 'Some',
  another: 'Another',
  theOne: function() {
    console.log(this.setTimeOut)
    }.bind(global)
 }

Antwoord 5

Soms, wanneer u een aangepast project gebruikt en helemaal geen “venster”-object nodig hebt, definieert u het gewoon met blanco, vóór alle andere inhoud:

window = {};

Antwoord 6

Dit is misschien niet het probleem waarmee u wordt geconfronteerd, maar ik krijg soms dezelfde foutmelding in vscode wanneer ik node gebruik om een javascript-bestand uit te voeren in de VScode-terminal.

Het volgende zorgde ervoor-

sudo apt install nodejs
npm init

om de een of andere reden kon VSCode het pad van nodejs-bestanden niet vinden

Other episodes