使用 node.js 和 express 在 Twilio 中请求未定义

Jos*_*pez 3 node.js twilio

我创建了一个网络钩子来接听 Twilio 语音电话。

var router = require('express').Router();
var twilio = require('twilio');

router.post("/voice", (request, response) => {
  // var fs = require('fs');
  // var util = require('util');
  // fs.writeFileSync('./request.json', util.inspect(request.body), 'utf-8');
  console.log(request.body);
  console.log('Call received from ' + request.body.From);
  //twimlAnswer();}
Run Code Online (Sandbox Code Playgroud)

webhook 和连接工作正常,但我试图访问 Twilio 通常在“请求”中提供的一些请求参数(与此示例类似的方式https://www.twilio.com/docs/tutorials/automated-survey -node-express#responding-to-a-phone-call )

我收到以下日志:

Express server listening on port 3000
undefined
TypeError: Cannot read property 'From' of undefined
    at router.post
Run Code Online (Sandbox Code Playgroud)

你知道为什么我没有正确访问请求吗?我发现的大多数示例访问 request.body 都没有问题...

谢谢,

phi*_*ash 6

Twilio 开发人员布道者在这里。

Twilio 将 webhook 请求作为 URL 编码的表单参数发送。因此,要在 Express 中读取请求正文,您需要包含正文解析器模块并将应用程序设置为使用urlencoded解析器。有点像这样:

var router = require('express').Router();
var twilio = require('twilio');
var bodyParser = require('body-parser');

router.use(bodyParser.urlencoded({ extended: false }));

router.post("/voice", (request, response) => {
  console.log('Call received from ' + request.body.From);
  // respond to webhook
});
Run Code Online (Sandbox Code Playgroud)