Waarom herkent node.js document.GetElementById niet?
Er staat ‘ReferenceError: document is not defined’.
Wat kan ik doen?
ReferenceError: document is not defined
at Object.<anonymous> (C:\Users\Desktop\main.js:9:18)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
Antwoord 1, autoriteit 100%
document
heeft betrekking op de DOM (Document Object Model) in een webbrowser.
Node.js is echter geen browseromgeving. Het is een serveromgeving, net als PHP of Perl, en als zodanig heb je geen toegang tot de DOM van de browser of kun je iets specifieks doen voor door de browser gehost JavaScript.
Het beste wat je zou kunnen krijgen is het gebruik van iets als browserifyom Node.js-modules in uw client-side code op te nemen.
Antwoord 2, autoriteit 73%
Je zou JSDomkunnen gebruiken om Dom-ondersteuning toe te voegen aan Node. Om een variabele globaal te maken, kun je ofwel
global.document = new JSDOM(html).window.document;
of
global.document = new JSDOM(html).window.document;
waar html
uw website is als string.
Om JSDom te gebruiken, neem het op in uw project met:
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
of in gewoon JS met:
var jsdom = require("jsdom");
var JSDOM = jsdom.JSDOM;
Ik hoop dat dit uw vraag beantwoordt.
Antwoord 3, Autoriteit 14%
Om het antwoord te begrijpen, is het noodzakelijk om de relatie van: JavaScript Engine , Browser en Node.js .
JavaScript-motor : is JavaScript-compiler die JS in de machinecode wordt. Bijvoorbeeld V8 is een geweldige. Technisch gezien is V8 ontwikkeld in C++ (u kunt het beschouwen als een C++ -programma).
V8 implementeert Ecmascript , een standaard van JavaScript-taal die de functies en functionaliteiten van JavaScript definiëren.
Maar DOM Werking wordt niet gedefinieerd door Ecmascript. Dus V8 ondersteunt het niet.
Browser : en ontwikkelaars kunnen document
gebruiken voor DOM-bediening in browser, omdat DOM-werking wordt verstrekt door browser, bijvoorbeeld: Chrome.
Chrome wordt ook ontwikkeld door C++ en V8 (zoals vermeld Abvoe, die ook is ontwikkeld door C++) is ingebed in Chrome om JavaScript te interpreteren. Dus chroom is uitgegeven of voegt functies toe aan JavaScript door JS-opdracht en C++ implementatie bij elkaar te binden.
NODEJS : anders dan het chroom, is het een server-zijprogramma. Maar hetzelfde is dat NODEJS wordt ontwikkeld door C++ en V8 is ingebed in NODEJS om JS te hanteren. Nodejs breidt functies van Javascript uit op dezelfde manier met chroom. Maar aangezien de serverzijde niet hoeft te hanteren, kunt u geen toegang krijgen tot dergelijke functies binnen NODEJS.
Antwoord 4
OK, korter antwoord Is u toegang tot document
objecten die alleen beschikbaar is in het venster en de voorkant, vergeet dat niet document
=== window.document
die u geen toegang hebt in de server en knooppuntzijde …
Probeer dus nooit zoiets op je knooppunt, bijvoorbeeld het krijgen van root-element door ID die de fout gooit, probeer in plaats daarvan toegang te krijgen tot Frontend:
document.getElementById('root');
Gooi een foutmelding:
ReferenceError: document is not defined
at Object.<anonymous> (C:\Users\Desktop\app.js:12:50)
at Module._compile (my.js:490:34)
at Object.Module._extensions..js (my.js:518:10)
at Module.load (my.js:555:42)
at Function.Module._load (my.js:610:12)
at Function.Module.runMain (my.js:701:10)
at startup (node.js:899:16)
at node.js:901:3
Het korte antwoord is niet gebruik Document en Window Object in node.js
zoals ze niet beschikbaar zijn in node.js
…
Gebruik Domino kan in sommige gevallen helpen om toegang te krijgen tot de DOM …
Zoals de naam zou kunnen voorstellen, is Domino’s doel is om een DOM in het knooppunt te verschaffen.
In tegenstelling tot het oorspronkelijke DOM.JS-project, is Domino niet ontworpen om
Voer niet-vertrouwde code uit. Vandaar dat het zijn internals niet achterblijft
een proxygevel die de code niet alleen eenvoudiger maakt, maar ook meer
performant.Domino gebruikt momenteel geen harmonie-functies zoals proxies of
ZwakkeMaps en daardoor ook in oudere knooppunten.
Ga voor meer info hier …
Antwoord 5
- “
npm install npm -g
” - daarna “
npm install -g typescript
“
deze opdracht heeft me geholpen voor dit probleem