Node.js-document is niet gedefinieerd

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%

documentheeft 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 htmluw 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 documentgebruiken 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 documentobjecten die alleen beschikbaar is in het venster en de voorkant, vergeet dat niet document=== window.documentdie 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.jszoals 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

Other episodes