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

为什么我的Node.js函数无法返回SQL Server数据且提示无内容可发送

问题排查与修复方案
  • 补充请求异常与状态码校验逻辑
    现有代码未处理http请求报错、接口返回非2xx状态码的场景,接口404、500时返回的空内容或错误文本会直接导致后续逻辑失败,需要添加req的error事件监听,同时在响应回调中优先校验状态码是否正常。
  • 新增JSON解析异常捕获
    如果接口返回非合法JSON结构(比如错误页面、纯文本提示),JSON.parse会直接抛出异常,后续的字符串拼接逻辑完全不会执行,最终触发空内容判定,需要把JSON解析逻辑包裹在try...catch块中。
  • 校验接口返回数据结构
    你默认接口直接返回数组,但多数业务接口会把实际数据包裹在data字段下,示例结构:{"code":200,"data": [实际数据数组]},此时你直接取返回对象的length会得到undefined,循环不会执行,建议解析后先打印返回内容确认结构是否符合预期。
  • 修正隐式全局变量问题
    代码中options、arrRows、objRow都没有添加变量声明,属于隐式全局变量,很容易被其他逻辑篡改导致结果异常,建议补充let/const声明。

修复后代码示例

function findCasesAndSendMessage(blnExitProcess) {
    const http = require('http');
    
    const options = {
        host: HOST,
        port: PORT,
        path: '/DailySummary',
        method: 'GET'
    };
    
    const req = http.request(options, function (res) {
        // 校验响应状态码
        if (res.statusCode < 200 || res.statusCode >= 300) {
            console.log(`接口请求失败,状态码:${res.statusCode}`);
            if (blnExitProcess) setTimeout(exitProcess, 10000);
            return;
        }

        let msg = '';
        res.setEncoding('utf8');
    
        res.on('data', function (chunk) {
            msg += chunk;
        });

        res.on('end', async function () {
            let strMessage = '';
            let arrRows = [];
            try {
                arrRows = JSON.parse(msg);
                // 调试时打开,确认返回结构是否符合预期
                // console.log('接口返回内容:', arrRows);
                // 如果接口返回是带data的包裹结构,替换为下方写法
                // arrRows = JSON.parse(msg).data
            } catch (e) {
                console.log('JSON解析失败,返回内容:', msg, '错误信息:', e);
                if (blnExitProcess) setTimeout(exitProcess, 10000);
                return;
            }

            // 校验返回是否为数组
            if (!Array.isArray(arrRows)) {
                console.log('返回内容不是预期的数组结构:', arrRows);
                if (blnExitProcess) setTimeout(exitProcess, 10000);
                return;
            }

            for (let i = 0; i < arrRows.length; i++) {
                const objRow = arrRows[i];
                // 新增字段存在性校验,避免拼接undefined
                if (objRow?.strText) {
                    strMessage += objRow.strText + "\n";
                }
            }
            console.log(strMessage);
            if (strMessage.length > 0) {
                console.log("Message sent!");
                await sendMessage(strMessage);
            } else {
                console.log("Nothing to send!");
            }

            if (blnExitProcess) {
                setTimeout(exitProcess, 10000);
            }
        });
    });

    // 监听请求发送异常
    req.on('error', (e) => {
        console.log(`请求发送失败:${e.message}`);
        if (blnExitProcess) setTimeout(exitProcess, 10000);
    });

    req.end();
};

内容的提问来源于stack exchange,提问作者Trè254

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:06:02