Node.js документ не определен.

Почему node.js не распознает document.GetElementById? Он говорит, что "ReferenceError: document not defined". Что я могу сделать?

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

Ответ 1

document относится к DOM (Document Object Model) в веб-браузере.

Node.js, однако, не является браузером Javascript. Это сервер, похожий на PHP или Perl, и вы не можете получить доступ к DOM браузера или сделать что-то конкретное для Javascript на основе браузера.

Ближе всего вы можете использовать что-то вроде , чтобы включить Node.js модули в ваш код на стороне клиента.

Ответ 2

Вы можете использовать JSDom для добавления поддержки Dom в Node. Чтобы сделать переменную глобальной, вы можете использовать

GLOBAL.document = new JSDOM(html).window.document;

или же

global.document = new JSDOM(html).window.document;

где html это ваш сайт в виде строки.

Чтобы использовать JSDom, включите его в свой проект с:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;

или просто JS с:

var jsdom = require("jsdom");
var JSDOM = jsdom.JSDOM;

Я надеюсь, что это отвечает на ваш вопрос.

Ответ 3

ОК, более короткий ответ: вы хотите получить доступ к document Объекту, который доступен только в окне и на лицевой стороне, не забывайте, что document === window.document, к которому у вас нет доступа в сервер и node сторона...

Поэтому никогда не пробуйте что-то подобное на вашей стороне node, например, получая корневой элемент по идентификатору, который выдает ошибку, вместо этого попытайтесь получить к нему доступ из FrontEnd:

document.getElementById('root');

выдает ошибку:

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

Короткий ответ: не используйте документ и окно в node.js, поскольку они недоступны в node.js...

Использование Domino может помочь в некоторых случаях для доступа к dom...

Как следует из названия, целью домино является предоставление DOM в Node.

В отличие от оригинального проекта dom.js, домино не предназначалось для запустить ненадежный код. Следовательно, ему не нужно скрывать свои внутренние прокси-фасад, который делает код не только более простым, но и более производительным.

В настоящее время Domino не использует никаких гармонических функций, таких как прокси или WeakMaps и, следовательно, также работает в более старых версиях node.

Для получения дополнительной информации посетите здесь...

Ответ 4

  • " npm install npm -g "
  • после этого " npm install -g typescript "

эта команда помогла мне решить эту проблему