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

Node.js环境下Twilio Webhook请求req.body为undefined问题求助

报错原因

  • Express 请求对象req上不存在IncomingMessage属性,你尝试访问req.IncomingMessage.body时,因为req.IncomingMessage本身为undefined,直接触发了空指针类型错误。
  • 你的代码未配置 Express 解析 POST 请求体的中间件,Twilio Webhook 默认发送application/x-www-form-urlencoded格式的请求,缺少对应解析中间件的情况下,就算路径写对也拿不到请求参数。
  • Twilio 传入的请求参数会直接挂载到解析后的req.body对象上,不需要加额外前缀,且参数名首字母为大写格式。

修复方案

修改后完整代码如下:

// Imports
const http = require('http')
const express = require('express')
const app = express()
const port = 80
const MessagingResponse = require('twilio').twiml.MessagingResponse;
// 新增:解析urlencoded格式的POST请求体,适配Twilio Webhook请求格式
// Express 4.16以下版本需先安装body-parser包,替换为bodyParser.urlencoded({ extended: false })
app.use(express.urlencoded({ extended: false }))
// Static Files
app.use(express.static('public'))

// Set views
app.set('views', './views')

app.post('/sms', (req, res) => {
    const twiml = new MessagingResponse();

    // 修改:直接从req.body读取Twilio传入的参数,注意字段首字母大写
    console.log('短信内容:', req.body.Body)
    console.log('发送方手机号:', req.body.From)
    console.log('接收方Twilio手机号:', req.body.To)

    res.writeHead(200, {'Content-Type': 'text/xml'});
    res.end(twiml.toString());
});

// Listen on port
app.listen(port, () => {
    console.log(`Running on port ${port}`)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:36:04