You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中document未定义报错,如何替代document操作DOM?

问题原因

你把前端DOM操作的代码写到了**Node.js后端文件(app.js)**里了。document是浏览器环境专属的对象,Node.js作为后端运行环境根本没有这个API,所以才会报ReferenceError。把脚本移到HTML底部没用,是因为错误出在后端执行的代码里,和前端脚本位置无关。

解决方法

1. 把DOM操作代码移到前端JS文件里

创建单独的前端JS文件(比如public/js/app.js),把DOM操作逻辑放在这里:

const weatherForm = document.querySelector('form')
// 这里写后续的DOM操作,比如监听表单提交等

然后在你的HTML模板底部引入这个前端JS文件:

<body>
  <!-- 页面其他内容 -->
  <script src="/js/app.js"></script>
</body>

还要在后端的app.js里配置Express托管静态文件:

// 托管public目录下的静态资源
app.use(express.static('public'))

2. 服务端渲染场景的处理(如果需要后端生成页面)

如果是用EJS、Pug这类模板引擎做服务端渲染,不需要在后端操作document,直接在模板里写HTML结构,后端负责传递数据渲染页面:
比如用EJS的例子:

  • 后端app.js配置:
app.set('view engine', 'ejs')
app.get('/', (req, res) => {
  res.render('index', { pageTitle: '天气查询' })
})
  • views/index.ejs模板里写表单:
<form action="/get-weather" method="POST">
  <input type="text" name="location" placeholder="输入城市">
  <button type="submit">查询天气</button>
</form>

3. 注意:后端不能直接操作浏览器DOM

Node.js运行在服务器上,和用户的浏览器是完全独立的环境。后端只能生成HTML、CSS、JS代码发送给浏览器,由浏览器在前端环境执行这些代码来完成DOM操作。

内容的提问来源于stack exchange,提问作者sheebadjf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:33:27