我认为Twilio的请求参数的格式是作为JSON序列化数据返回的 - 根据响应回调部分列出的文档(http://twilio.github.io/twilio-node/#restResources)
如果是这种情况,我认为我可以使用JSON.parse访问请求参数(特别是文本正文),如下所示...但是我没有得到任何类型的响应。
var http = require('http');
var twilio = require('twilio');
http.createServer(function (req, res) {
var body = '';
req.on('data', function(data) {
var messageBody = JSON.parse(data);
body += messageBody.body;
});
req.on('end', function() {
//Create TwiML response
var twiml = new twilio.TwimlResponse();
twiml.message('Thanks, your message of "' + body + '" was received!');
res.writeHead(200, {'Content-Type': 'text/xml'});
res.end(twiml.toString());
});
}).listen(8080);
在此之前,我尝试访问如下图所示的参数......但正文总是返回“未定义”。
var http = require('http');
var twilio = require('twilio');
http.createServer(function (req, res) {
var body = '';
req.on('data', function(data) {
body += data.body;
});
req.on('end', function() {
//Create TwiML response
var twiml = new twilio.TwimlResponse();
twiml.message('Thanks, your message of "' + body + '" was received!');
res.writeHead(200, {'Content-Type': 'text/xml'});
res.end(twiml.toString());
});
}).listen(8080);
如果我只做body += data;
,那么我收到了所有组合在一起的请求参数 - 我不需要。
思考?你能解释一下如何访问特定的请求参数吗?
的 的 ** * ** * *** 修订版的 * ** * ** * ** 在纳入@ hexacyanide的建议后,我最终得到了以下代码
var http = require('http');
var twilio = require('twilio');
var qs = require('querystring');
http.createServer(function (req, res) {
var body = '';
req.setEncoding('utf8');
req.on('data', function(data) {
body += data;
});
req.on('end', function() {
var data = qs.parse(body);
var twiml = new twilio.TwimlResponse();
var jsonString = JSON.stringify(data);
var jsonDataObject = JSON.parse(jsonString);
twiml.message('Thanks, your message of ' + jsonDataObject.Body + ' was received!');
res.writeHead(200, {'Content-Type': 'text/xml'});
res.end(twiml.toString());
});
}).listen(8080);
答案 0 :(得分:2)
正如我在你的类似问题中回答的那样,你必须等待整个回复才能对它做任何事情。当您从请求流中接收数据时:
var buf = '';
req.setEncoding('utf8');
req.on('data', function(chunk) {
buf += chunk;
});
您正在接收原始数据。它是未处理的字节,尚未解析,并且您不知道它代表了多少总数据(除非您已检查内容长度标题)。这也意味着你不能使用JSON.parse()
,因为你将获得一段未知长度的数据,通常不代表整个JSON字符串(如果它只是括号,或者它真的很短长度等)。
即使收到特定的请求参数,您也必须收到整个请求并进行解析。为此目的创建了来自流行模块Express的bodyParser()
等模块。如果您不想使用模块,只需收集请求并解析它:
var buf = '';
req.setEncoding('utf8');
req.on('data', function(chunk) {
buf += chunk;
});
req.on('end', function() {
var data = JSON.parse(buf);
});