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

Node.js返回Twilio旧余额至Angular组件的问题排查

问题排查与解决

核心原因:客户端缓存导致重复返回初始余额

你的问题大概率是浏览器缓存GET请求响应造成的。后端接口返回账户余额时未设置禁止缓存的响应头,浏览器将首次请求的初始余额结果缓存,后续每隔10秒的查询直接读取本地缓存,不会触发新的后端请求,自然无法获取发送短信后的最新余额。重启后端后首次请求会重新拉取数据,所以能看到正确结果。

另外,你的Node.js代码存在不必要的性能损耗:每次请求都重复require('twilio')并实例化客户端,虽然这不是缓存余额的直接原因,但建议优化。

修复步骤

1. 后端添加禁止缓存的响应头

修改Node.js控制器代码,在返回响应时添加缓存控制头,强制浏览器不缓存结果:

require('dotenv').config();
// 全局实例化Twilio客户端,避免重复创建
const client = require('twilio')(process.env.ACCOUNT_SID, process.env.AUTH_TOKEN);

exports.getTwilioAccountBalance = (req, res) => {
  client.balance.fetch()
    .then((data) => {
      const balance = Math.round(data.balance * 100) / 100;
      console.log(`Your account balance is ${balance} ${data.currency}.`);

      // 添加禁止缓存的响应头
      res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
      res.setHeader('Pragma', 'no-cache');
      res.setHeader('Expires', '0');
      
      res.status(200).send({ balance });
    })
    .catch(function(error) {
      console.log(error);
      res.status(500).send({ error: error.message });
    });
};

2. 前端请求添加缓存控制头(可选加固)

在Angular的Twilio服务中,给GET请求添加缓存控制头,进一步避免浏览器缓存:

import { HttpClient, HttpHeaders } from '@angular/common/http';

// ...

getTwilioAccountBalance() {
  const headers = new HttpHeaders({
    'Cache-Control': 'no-cache',
    'Pragma': 'no-cache'
  });
  return this.http.get('/api/twilio/balance', { headers });
}

验证效果

修改完成后,触发cron发送短信,等待10秒后查看前端查询结果,应该能看到更新后的账户余额,无需重启后端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:30:45