我正在尝试通过PHP cURL将post请求发送到我的node.js服务器,然后向客户端发送消息。服务器的工作和设置如下:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
, qs = require('querystring')
app.listen(8000);
function handler(req, res) {
// set up some routes
switch(req.url) {
case '/push':
if (req.method == 'POST') {
console.log("[200] " + req.method + " to " + req.url);
var fullBody = '';
req.on('data', function(chunk) {
fullBody += chunk.toString();
if (fullBody.length > 1e6) {
// FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST
req.connection.destroy();
}
});
req.on('end', function() {
// Send the notification!
var json = qs.stringify(fullBody);
console.log(json.message);
io.sockets.emit('push', { message: json.message });
// empty 200 OK response for now
res.writeHead(200, "OK", {'Content-Type': 'text/html'});
res.end();
});
}
break;
default:
// Null
};
}
我的PHP如下:
$curl = curl_init();
$data = array('message' => 'simple message!');
curl_setopt($curl, CURLOPT_URL, "http://localhost:8000/push");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_exec($curl);
控制台说json.message未定义。为什么不明确?
答案 0 :(得分:1)
您错误地使用了querystring.stringify()。请参阅此处有关querystring方法的文档:
http://nodejs.org/docs/v0.4.12/api/querystring.html
我相信你想要的是像JSON.stringify()或querystring.parse(),而不是querystring.stringify(),它应该将现有对象序列化为查询字符串;这与你要做的事情正好相反。
您想要的是将fullBody字符串转换为JSON对象的内容。
答案 1 :(得分:1)
如果您的身体只包含JSON blob的字符串化版本,请替换
var json = qs.stringify(fullBody);
用
var json = JSON.parse(fullBody);
答案 2 :(得分:0)
尝试此代码
package com.example.demo3;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class Demo3Application {
public static void main(String[] args) {
SpringApplication.run(Demo3Application.class, args);
}
}