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

Node.js中全局变量videoTitle返回undefined的问题求助

解决videoTitle返回undefined的问题

问题原因

  • 异步执行顺序错误:axios.get是异步任务,scraper函数调用后不会立即完成,后续的console.log和client.messages.create会先执行,此时videoTitle还未被赋值,所以返回undefined。
  • 未正确提取文本:$(".home-title")获取的是Cheerio DOM对象集合,不是直接的文本内容,无法直接用于消息体。
  • 变量未声明:videoTitle没有用let/const声明,存在全局污染风险。

修正后的代码

使用async/await确保异步任务完成后再执行后续逻辑,同时正确提取文本内容:

const scraper = async () => {
  const urlData = await axios.get("https://thehackernews.com/");
  const $ = cheerio.load(urlData.data);
  // 提取第一个标题的文本,若需所有标题可改用.map()处理
  const videoTitle = $(".home-title").first().text().trim();
  return videoTitle;
};

// 用自执行async函数包裹主逻辑
(async () => {
  try {
    const videoTitle = await scraper();
    console.log("logging to the console:", videoTitle);

    const message = await client.messages.create({
      body: `Message: ${videoTitle}`,
      // 需补充对应平台的必填参数,比如Twilio的to/from号码
      to: "+1234567890",
      from: "+0987654321"
    });
    console.log(message.sid);
  } catch (error) {
    console.error("执行出错:", error);
  }
})();

关键说明

  • async/await将异步代码同步化,确保爬取完成后再执行打印和消息发送操作。
  • $(".home-title").first().text().trim():获取第一个匹配元素的文本并去除首尾空格,避免多余空白;若需所有标题,可改用$(".home-title").map((i, el) => $(el).text().trim()).get()得到文本数组,再拼接成字符串。
  • 加入try/catch捕获异步操作中的错误,避免程序直接崩溃。
  • 消息创建时需补充对应平台的必填参数(如短信服务的接收/发送号码),否则会触发参数错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:39:54