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.js
maak ik een venstervariabele aan met de naam windowVar
en voeg ik er enkele attributen aan toe. In myModule.js
voeg 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%
window
is 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
global
is de identifier van Node voor het globale object, zoals window
in 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%
window
object is alleen aanwezig in de context van browser. Bij het uitvoeren van een applicatie op nodejs
is er geen window
object beschikbaar. Als u uw variabelen of functies over meerdere bestanden wilt delen, moet u require
en 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