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

使用Express获取URL JSON渲染EJS页面时遇Cannot GET /错误求助

解决Express应用中“Cannot GET /”错误及数据渲染问题

看起来你在从原生Node.js转用Express的过程中遇到了两个核心问题:一是根路由无法正常响应(出现“Cannot GET /”),二是JSON数据无法正确渲染到EJS页面。我帮你一步步排查和修复:

1. 先解决“Cannot GET /”的核心问题

你的代码里有个关键问题:Express 4.x已经移除了内置的express.errorHandler()方法,但你还在错误处理中间件里调用它,这会导致应用启动时就抛出错误,进而无法正常处理根路由的请求。

修复步骤:

  • 首先安装专门的错误处理模块(仅在开发环境使用):
    npm install errorhandler --save-dev
    
  • 修改app.js里的错误处理部分:
    // 先引入errorhandler模块
    var errorHandler = require('errorhandler');
    
    // 替换原来的错误处理逻辑
    if (app.get('env') === 'development') {
      // 开发环境用errorhandler展示详细错误
      app.use(errorHandler());
    } else {
      // 生产环境返回通用错误提示
      app.use(function(err, req, res, next) {
        res.status(500).send('Internal Server Error');
      });
    }
    

2. 确保路由逻辑正常工作

你的路由挂载顺序是对的,但可以给request请求增加日志和错误捕获,方便排查API请求是否成功:

修改router.get('/')的回调函数:

router.get('/', function(req, res, next) {
  request('http://public.api.openprocurement.org/api/2.4/tenders?offset=2018-01-05T21:02:46.167030+02:00', function (err, response, body) {
    // 捕获请求本身的错误
    if (err) {
      console.error('请求API时出错:', err);
      return res.status(500).send('获取数据失败,请检查API链接');
    }
    // 检查API响应状态码
    if (response.statusCode !== 200) {
      console.error('API响应状态异常:', response.statusCode);
      return res.status(500).send(`API返回状态码:${response.statusCode}`);
    }
    // 捕获JSON解析错误
    try {
      const newsData = JSON.parse(body);
      res.render('index', { 
        title : 'Main page', 
        news : newsData, 
        some: '<b>Hello</b>' 
      });
    } catch (parseErr) {
      console.error('解析JSON数据出错:', parseErr);
      return res.status(500).send('解析数据失败');
    }
  });
});

3. 修复EJS模板的渲染问题

你当前的EJS代码<%-news%>直接输出JSON对象,页面上只会显示[object Object],需要把对象转为格式化的JSON字符串才能正常展示:

修改你的EJS模板文件:

<h1><%= title %></h1>

<h2>API返回的JSON数据:</h2>
<!-- 使用JSON.stringify把对象转为格式化的字符串,pre标签保留格式 -->
<pre><%= JSON.stringify(news, null, 2) %></pre>

<h2>富文本示例:</h2>
<%- some %>

最后验证

完成以上修改后,重启你的Express应用:

  • 如果API请求正常,页面会显示格式化的JSON数据和加粗的“Hello”;
  • 如果API请求失败,控制台会输出详细错误信息,页面也会有对应的提示,方便你进一步排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:26:01