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

Node.js调用API无法通过Promise返回数据且请求无限加载如何解决

问题原因和修复方案
  • 核心问题:Express 路由处理函数不会自动将函数返回值作为响应返回,你需要主动调用res.json()或res.send()方法将数据响应给客户端,否则请求会一直处于等待响应的加载状态。
  • 代码规范问题:manga变量未做声明,会变成隐式全局变量,可能引发不可预期的错误。
  • 异步写法问题:同时混用async/await和.then/.catch,代码逻辑混乱,增加异步流程出错的概率。
修正后的控制器代码
const express = require('express')
const MFA = require('mangadex-full-api')

module.exports = {
    async indexManga(req, res) {
        try {
            // 完成登录验证
            await MFA.login('DarksGol', 'R@ul1605', './md_cache/')
            // 执行漫画搜索
            const results = await MFA.Manga.search('Kiss')
            // 格式化返回结果
            const mangalist = results.map(elem => {
                return {
                    status: elem.status,
                    title: elem.title
                }
            })
            // 主动返回响应数据
            console.log(mangalist)
            return res.json(mangalist)
        } catch (err) {
            // 捕获异常返回错误响应,避免请求挂起
            console.error(err)
            return res.status(500).json({
                code: 500,
                msg: '漫画查询失败',
                error: err.message
            })
        }
    }
}
改动说明
  • 统一用async/await配合try/catch处理异步逻辑,代码结构更清晰,全流程异常都能被捕获处理。
  • 去掉冗余的中间变量,直接用map方法生成处理后的漫画列表,避免未声明变量的问题。
  • 成功查询时主动调用res.json()将结果返回给客户端结束请求;出现错误时主动返回500错误响应,避免请求无限挂起。
  • 现有路由代码无需改动,可直接正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:06