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

Node.js项目点击链接报错Cannot GET /to-do.html如何解决

问题核心原因

你遇到的404报错:

Cannot GET /to-do.html
本质是前端请求路径和后端配置的路由规则不匹配:

  • 前端a标签设置的跳转路径是/to-do.html,但后端只定义了/toDo、/notes这类不带.html后缀的路由,没有对应/to-do.html的处理逻辑
  • 你配置的express.static托管的是/public目录下的文件,如果你把html文件放在项目根目录而非public目录下,静态托管逻辑也无法匹配到这些文件

解决方案

方案1:修改前端跳转路径(最快生效)

直接调整index.html中a标签的href属性,和后端路由保持一致即可:

<nav class="navbar navbar-expand-lg navbar-dark">
    <div class="collapse navbar-collapse" id="nav-dropdown">
      <ul class="navbar-nav ms-right">
        <li class="nav-item">
          <!-- 把href从/to-do.html修改为后端定义的/toDo -->
          <a href="/toDo" class="nav-link">To-Do</a>
        </li>
        <!-- 其他页面同理修改 -->
        <li class="nav-item">
          <a href="/notes" class="nav-link">Notes</a>
        </li>
      </ul>
    </div>
</nav>

方案2:修改后端路由适配前端路径

如果不想改动前端代码,可以在后端新增对应路径的路由规则:

// 新增匹配/to-do.html的路由
app.get("/to-do.html", function (req, res) {
    res.sendFile(__dirname + "/to-do.html");
});
// notes页面同理新增
app.get("/notes.html", function (req, res) {
    res.sendFile(__dirname + "/notes.html");
});

方案3:优化静态资源托管(长期使用更推荐)

把所有HTML文件(index.html、to-do.html、notes.html等)全部移动到项目的public文件夹下,之后可以删除所有自定义的HTML返回路由,express.static会自动匹配public目录下的文件路径,直接访问/to-do.html即可加载对应内容,后续新增页面也不需要修改服务端代码:

// 简化后的服务端代码
const express = require("express");
const path=require('path');

const app = express();
app.use(express.static(path.join(__dirname,"/public")));

app.listen(3000,function(){
    console.log("Server started on port 3000");
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:04