Node.js报错ReferenceError: document is not defined及localhost连接问题求助
解决Node.js中
ReferenceError: document is not defined错误及连接本地服务器方法 先理清错误根源
document是浏览器环境特有的DOM对象,Node.js是服务器端JavaScript运行环境,本身不存在浏览器的DOM API,所以直接在Node.js里运行包含document的代码必然报错——这和Node.js是否连接服务器完全无关。
解决document is not defined的两种场景
场景1:代码是前端浏览器代码
别用Node.js直接运行这类代码,把代码嵌入HTML文件,用浏览器打开HTML就能正常运行(浏览器会提供document对象)。
场景2:必须在Node.js环境用DOM API
可以用jsdom库模拟浏览器DOM环境:
- 安装依赖:
npm install jsdom - 在代码中引入并配置:
const { JSDOM } = require('jsdom'); // 模拟一个空的HTML文档 const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>'); // 将document挂载到全局 global.document = dom.window.document; // 之后就能正常使用document相关方法了 const div = document.createElement('div'); console.log(div);
让Node.js连接/监听127.0.0.1:300
情况1:搭建本地服务监听127.0.0.1:300
以Express框架为例(最常用的Node.js web框架):
- 安装Express:
npm install express - 编写服务代码(比如命名为
server.js):const express = require('express'); const app = express(); const port = 300; // 定义一个简单的路由 app.get('/', (req, res) => { res.send('服务已在127.0.0.1:300运行'); }); // 启动服务,绑定127.0.0.1:300 app.listen(port, '127.0.0.1', () => { console.log(`服务地址:http://127.0.0.1:${port}`); }); - 运行服务:
node server.js
此时你的Node.js服务就已经连接并监听127.0.0.1:300了,打开浏览器访问该地址就能看到返回内容。
情况2:作为客户端连接127.0.0.1:300的服务
如果是要让Node.js作为请求方连接到本地300端口的服务,用Node.js内置的http模块即可:
const http = require('http'); const requestOptions = { hostname: '127.0.0.1', port: 300, path: '/', method: 'GET' }; const req = http.request(requestOptions, (res) => { console.log(`服务返回状态码:${res.statusCode}`); // 接收服务返回的数据 res.on('data', (chunk) => { console.log(`返回内容:${chunk}`); }); }); // 处理请求错误 req.on('error', (err) => { console.log(`请求失败:${err.message}`); }); // 发送请求 req.end();
内容的提问来源于stack exchange,提问作者Muhammad Septiyan140905
相关产品推荐
相关产品推荐

