javascript - form - read post params nodejs
POST a PHP desde Node.js (1)
Estoy intentando enviar algunos datos de una aplicación Node.js a un script PHP. Por el momento, solo estoy creando una prueba de concepto, pero no puedo transferir los datos al lado de PHP. La solicitud se procesa y recupero 200, pero PHP cree que la matriz $ _POST está vacía.
Aquí está mi código de nodo:
// simple end point just for testing
exports.testPost = function(request, response) {
data = request.body.data;
postToPHP(data);
response.end(data);
}
function postToPHP (data) {
var http = require(''http'');
var options = {
host : ''localhost'',
port : 8050,
path : ''/machines/test/index.php'',
method : ''POST'',
headers : {
''Content-Type'' : ''application/json'',
''Content-Length'' : Buffer.byteLength(data)
}
};
var buffer = "";
var reqPost = http.request(options, function(res) {
console.log("statusCode: ", res.statusCode);
res.on(''data'', function(d) {
console.info(''POST Result:/n'');
//process.stdout.write(d);
buffer = buffer+data;
console.info(''/n/nPOST completed'');
});
res.on(''end'', function() {
console.log(buffer);
});
});
console.log("before write: "+data);
reqPost.write(data);
reqPost.end();
}
Nuevamente, la solicitud llega a localhost: 8050 / machines / test / index.php pero cuando hago un var_dump de $ _POST es una matriz vacía.
[29-Jan-2014 21:12:44] array(0) {
}
Sospecho que estoy haciendo algo mal con el método .write () pero no puedo entender qué. Cualquier comentario sobre lo que me falta o lo que hago incorrectamente sería muy apreciado.
* Actualización:
Como algunos de los comentarios indican usar file_get_contents (''php: // input''); funciona para obtener los datos en el lado de PHP, pero aún así preferiría poder acceder directamente al conjunto $ _POST.
Ya que está enviando los datos con Content-Type: application/json
, necesitaría leer la entrada sin procesar ya que php no sabe cómo leer json en sus globales como _GET y _POST a menos que tenga alguna extensión de php que lo haga.
Puede usar la biblioteca querystring para analizar un objeto en una cadena de consulta de pares nombre-valor que podría transmitir con Content-Type:application/x-www-form-urlencoded
para que los datos se analicen en los globales
var data = {
var1:"something",
var2:"something else"
};
var querystring = require("querystring");
var qs = querystring.stringify(data);
var qslength = qs.length;
var options = {
hostname: "example.com",
port: 80,
path: "some.php",
method: ''POST'',
headers:{
''Content-Type'': ''application/x-www-form-urlencoded'',
''Content-Length'': qslength
}
};
var buffer = "";
var req = http.request(options, function(res) {
res.on(''data'', function (chunk) {
buffer+=chunk;
});
res.on(''end'', function() {
console.log(buffer);
});
});
req.write(qs);
req.end();