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

如何修改Express代码,使GET接口可向Postman返回JSON数据

问题原因&修复方案

你当前代码无法响应Postman的GET请求主要有三个核心问题:

  • 异步流程逻辑错误:getToken、getGames都是异步网络请求,你使用setTimeout延迟1秒调用的方式不可靠,且没有在请求完成的回调里触发响应
  • 响应对象被覆盖:内层request请求的回调参数命名为res,和外层/getinfo路由的响应对象重名,导致你无法调用正确的响应方法返回数据
  • 没有主动触发响应:拿到游戏接口返回的可打印数据后,你没有调用路由响应对象的返回方法把数据回传给请求方

修复后的完整代码

const express = require('express');
const app = express();
const PORT = 5000;
const request = require('request');
// 未使用的apicall可自行删除,这里保留原始引入状态

app.get('/', (req, res) => {
    res.send("Hello world!")
});
   
app.get('/getinfo', (req, res) => {
    // 移除多余的body参数
    const getToken = (url, callback) => {
        const options = {
            url: process.env.GET_TOKEN,
            json: true,
            body: {
                client_id: process.env.CLIENT_ID,
                client_secret: process.env.CLIENT_SECRET,
                grant_type: 'client_credentials'
            }
        };
        // 回调参数重命名为tokenRes,避免和外层路由响应对象冲突
        request.post(options, (err, tokenRes, body) => {
            if(err) {
                console.log(err)
                return callback(err)
            }
            console.log(`获取Token状态: ${tokenRes.statusCode}`)
            console.log(body);
            callback(null, tokenRes.body.access_token);
        });
    }
    
    const getGames = (url, accessToken, callback) => {
        const gameOptions = {
            url: process.env.GET_GAMES,
            method: 'GET',
            headers: {
                'Client-ID': process.env.CLIENT_ID,
                'Authorization': 'Bearer ' + accessToken
            }
        };
        // 回调参数重命名为gameRes,避免和外层路由响应对象冲突
        request.get(gameOptions, (err, gameRes, body) => {
            if(err) {
                console.log(err);
                return callback(err)
            }
            console.log(`获取游戏数据状态: ${gameRes.statusCode}`);
            const gameData = JSON.parse(body);
            console.log(gameData);
            callback(null, gameData)
        })
    }

    // 按异步逻辑顺序执行,移除不可靠的setTimeout延迟
    getToken(process.env.GET_TOKEN, (err, accessToken) => {
        if(err) {
            // 接口异常时返回错误信息给客户端
            return res.status(500).json({code: 500, msg: '获取Token失败', error: err})
        }
        getGames(process.env.GET_GAMES, accessToken, (err, gameData) => {
            if(err) {
                return res.status(500).json({code: 500, msg: '获取游戏数据失败', error: err})
            }
            // 拿到有效数据后直接返回给请求方
            res.json({code: 200, data: gameData})
        })
    })
});

app.listen(PORT, () => {
    console.log(`Example app listening on port ${PORT}`);
});

主要改动说明

  • 修正变量命名冲突,内层请求回调的响应对象分别命名为tokenRes和gameRes,不会再覆盖外层路由的响应对象
  • 移除不可靠的setTimeout延迟逻辑,改为在getToken请求成功的回调中调用getGames,保证异步请求顺序正确
  • 新增错误处理逻辑,请求失败时主动返回错误信息给客户端,避免请求无响应超时
  • 在getGames拿到有效数据后直接调用res.json,将数据返回给Postman请求发起方

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:05