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

Express.js/Vercel开发及部署后POST请求接收失败问题排查

解决Serverless Express.js + Twilio Webhook POST请求问题

开发阶段POST请求无法识别的解决方案

  • Twilio默认仅向HTTPS端点发送Webhook请求,本地localhost:4000为HTTP协议,Twilio可能直接拒绝发送请求,因此无日志。解决方式:
    • 在Twilio控制台的Webhook设置中,将协议从HTTPS改为HTTP(仅开发环境临时使用)
    • 继续使用ngrok等隧道工具生成HTTPS映射地址,确保Twilio能正常发送请求
  • 检查Express的CORS配置:若启用了CORS中间件,需确保允许Twilio的请求来源,开发阶段可临时设置cors({ origin: '*' })避免拦截
  • 确认Express已正确解析请求体:Twilio发送的是application/x-www-form-urlencoded格式,必须添加app.use(express.urlencoded({ extended: true })),否则无法解析POST参数

生产部署(Vercel)后请求失效的解决方案

1. 修正路由与代码结构

Vercel Serverless函数默认映射/api路径,若你的代码在api/index.ts,需通过路由重写将/webhook指向/api,修改vercel.json:

{
  "rewrites": [
    { "source": "/webhook", "destination": "/api" }
  ],
  "functions": {
    "api/index.ts": {
      "timeout": 60
    }
  }
}

2. 确保Serverless HTTP导出正确

检查api/index.ts的导出逻辑,必须用serverless-http包装Express应用并导出handler:

import express from 'express';
import serverless from 'serverless-http';

const app = express();

// 必须解析Twilio的x-www-form-urlencoded格式请求体
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.post('/webhook', (req, res) => {
  // 处理Twilio请求逻辑
  res.status(200).send('OK');
});

// 导出Serverless handler
export const handler = serverless(app);

3. 排查部署与日志问题

  • 检查Vercel控制台的「Functions」日志,确认请求是否到达函数(若日志为空,可能是路由配置错误或Twilio地址填写错误)
  • 确认Twilio生产环境的Webhook地址为https://你的Vercel应用域名/webhook,而非/api
  • 若返回504超时,在vercel.json中延长函数超时时间(最多60秒),如上述配置所示
  • 重新部署应用,确保本地修改的代码已提交并部署到Vercel

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:43:09