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

Node.js Messenger BOT用node-fetch从URL取数报500 如何修复代码

问题排查与修复方案

以下是你代码中存在的问题和修复后的完整代码:

现存问题

  • await 关键字仅可在 async 标记的异步函数中使用,你的 handleMessage 是普通同步函数,直接使用 await 会抛出语法错误,这是触发500响应的核心原因
  • fetch请求地址硬编码为固定字符串'url.com',未使用用户发送的实际URL,且缺少http/https协议头,无法正常发起请求
  • else代码块内重复声明了response变量,和外层的response变量冲突导致变量覆盖
  • 未添加异常捕获逻辑,fetch请求出现网络错误、响应失败时会直接抛出异常触发500
  • 原代码未等待异步请求返回就调用callSendAPI,会导致响应内容异常

修复后代码

// 给函数添加async标识,支持await语法
async function handleMessage(sender_psid, received_message) {
    let response;
    let nhan; // 提前声明变量,避免作用域问题

    // 检查消息是否包含文本
    if (received_message.text) {
        switch (received_message.text.replace(/[^\w\s]/gi, '').trim().toLowerCase()) {
            case "room preferences":
                response = setRoomPreferences(sender_psid);
                break;
            default:
                var address = received_message.text;
                // 兼容无协议的URL,自动补全https
                if (!/^https?:\/\//i.test(address)) {
                    address = 'https://' + address;
                }
                var q = url.parse(address, true);
                if(q.host == null){
                    nhan = '未检测到有效URL';
                }
                else {
                    try {
                        // 使用用户发送的实际地址发起请求,添加异常捕获
                        const fetchRes = await fetch(address);
                        // 校验请求是否成功
                        if (!fetchRes.ok) {
                            nhan = `请求失败,状态码:${fetchRes.status}`;
                        } else {
                            const body = await fetchRes.text();
                            nhan = body;
                        }
                    } catch (err) {
                        nhan = `请求出错:${err.message}`;
                    }
                }
                response = {
                    "text": `${nhan}`
                };
                break;
        }
    } else {
        response = {
            "text": `抱歉,我无法理解你发送的内容。`
        }
    }

    // 发送响应消息
    callSendAPI(sender_psid, response);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:57:02