在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
相关产品推荐
相关产品推荐

