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 на основе браузера.
Ближе всего вы можете использовать что-то вроде browserify, чтобы включить 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
"
эта команда помогла мне решить эту проблему