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

在Meteor.js中使用Twilio Voice时,WebApp.handlers.use()无法获取req.body?

解决Meteor中Twilio Voice POST请求req.body为undefined的问题

问题根源在于Meteor的WebApp默认未配置POST请求体解析中间件,Twilio发送的POST请求采用application/x-www-form-urlencoded格式,而Express(WebApp底层框架)不会自动解析该格式的请求体,因此导致req.body始终为undefined。

解决步骤:

  • 在你的/voice端点之前,添加解析x-www-form-urlencoded格式请求体的Express中间件
  • 之后即可在端点处理函数中正常获取请求体参数

示例代码:

// 导入express模块(Meteor环境已内置,无需额外安装)
const express = require('express');

// 添加请求体解析中间件,适配Twilio发送的参数格式
WebApp.handlers.use(express.urlencoded({ extended: false }));

// 定义/voice端点处理逻辑
WebApp.handlers.use('/voice', async (req, res, next) => {
    console.log('req.body: ', req.body); // 现在可正常打印请求体内容
    const target = req.body.to; // 获取Twilio发送的to参数(电话号码或客户ID)
    
    // 这里编写你的业务处理逻辑,比如生成TwiML响应
    res.type('text/xml');
    res.send(`<Response><Dial>${target}</Dial></Response>`);
});

补充说明:

  • extended: false表示使用原生querystring库解析请求体,完全满足Twilio发送的参数格式需求
  • 若后续遇到JSON格式的POST请求,可替换为express.json()中间件,但Twilio Voice回调默认采用form-urlencoded格式,无需额外配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:29:58