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

Node.js+HBS路由与public关联及/users接口404报错求助

解决404错误及路由与public目录的关联说明

一、404 (Not Found) 错误排查及修复

  • 路由未挂载到主应用
    你在routes/index.js中定义的/users路由,需要在项目主入口文件(通常是app.js或server.js)中引入并挂载,否则Express无法识别该路由。示例挂载代码:

    // app.js
    const express = require('express');
    const app = express();
    const routes = require('./routes/index');
    
    // 将路由模块挂载到根路径,routes中的'/users'会对应全局路径'/users'
    app.use('/', routes);
    
    app.listen(3000, () => {
      console.log('Server running on port 3000');
    });
    
  • 路由挂载时存在前缀
    如果挂载路由时指定了前缀(比如app.use('/api', routes)),AJAX请求的URL需要同步添加该前缀,修改为/api/users。

  • AJAX回调参数错误
    你的AJAX success回调中使用console.log(results),但参数实际是data,会导致results is not defined错误(虽不影响404,但会破坏后续逻辑)。修正后的AJAX代码:

    $.ajax({
        url: '/users',
        method: 'GET',
        success: function(data) {
          console.log(data);
        },
        error: function(error) {
          console.log(error);
        }
      });
    

二、路由文件夹与public目录的关联关系

  • 路由文件夹(routes)
    负责处理动态HTTP请求,是后端业务逻辑的核心入口:

    • 可定义接口路由(如你的/users接口,返回数据库查询结果);
    • 可定义页面渲染路由,返回HBS模板渲染后的页面;
    • 所有需要后端处理的逻辑(数据库交互、权限校验等)都通过路由触发。
  • public目录
    用于存放静态资源,通过Express的express.static中间件托管:

    • 包含前端JS、CSS、图片、字体等文件;
    • 资源可直接通过URL访问,比如public/javascripts/xxx.js对应访问路径/javascripts/xxx.js;
    • 静态资源请求无需经过路由处理,Express会直接返回文件内容。
  • 两者协作逻辑

    1. 路由渲染的HBS模板中,会引用public目录下的静态资源(如<script src="/javascripts/xxx.js"></script>);
    2. 静态资源中的JS(如你的AJAX代码)通过请求路由接口获取动态数据,完成前端交互;
    3. 二者是Express项目职责分离的核心部分:路由处理动态业务,public提供静态资源,共同构成完整的Web应用。

内容的提问来源于stack exchange,提问作者qarn.ooz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:32