节点JS HTTP请求不使用http请求

时间:2016-03-13 10:43:07

标签: javascript node.js tizen-web-app

我正在尝试使用本机节点js http请求发送http post请求。 我正在使用以下代码,但没有任何反应:

    var http = require('http');

    var options = {
      hostname: '192.168.1.134',
      port: '8082',
      path: '/api',
      method: 'POST',
      headers: {'content-type': 'application/json',
      'cache-control': 'no-cache'}
    };

    callback = function(response)
    {
      var result = [];
      response.on('data', function (chunk)
      {
        result.push(chunk);
      });

      response.on('end', function ()
      {
        console.log("LOCAL END" + result);
      });
    }

    var req = http.request(options, callback);


    req.write(JSON.stringify(
    { 
        customer: 'customer',
        deviceIndicator: 'id',
        userId: 'id2',
        lastVersion: 999 
    }), 'utf8' , 
    function(data)
    {
        console.log('flushed: ' + data);
    });
    req.end();

    console.log(" - trying to post to example - done" );

但如果我正在添加以下虚拟调用,我将按照预期从本地服务器获得答案:

    var options1 = {
      hostname: 'www.google.com',
      port: '80',
      path: '/',
      headers: {'cache-control': 'no-cache'}
    };

    callback1 = function(response1) {
      var str = ''
      response1.on('data', function (chunk) {
        str += chunk;
      });

      response1.on('end', function () {
        console.log("GOOGLE END" + str);
      });
    }

    var req1 = http.request(options1, callback1);
    req1.end();

    console.log("sent to google - done");

我做错了什么?

2 个答案:

答案 0 :(得分:0)

确保192.168.1.134:8082可以访问并响应(使用浏览器,curl或wget),然后尝试添加content-length标头:

var http = require('http');

var payload = JSON.stringify({ 
  customer: 'customer',
  deviceIndicator: 'id',
  userId: 'id2',
  lastVersion: 999 
});

var options = {
  hostname: '192.168.1.134',
  port: 8082,
  path: '/api',
  method: 'POST',
  headers: {
    'content-length': Buffer.byteLength(payload), // <== here
    'content-type': 'application/json',
    'cache-control': 'no-cache'
  }
};

var req = http.request(options, function(response) {
  var result = [];

  response.on('data', function(chunk) {
    result.push(chunk);
  });

  response.on('end', function () {
    console.log('LOCAL END' + result);
  });
});

req.write(payload);
req.end();

答案 1 :(得分:0)

最终,我发现问题在于设备本身存在某种问题。 当发送http请求到直接IP地址时没有发生任何事情,但是当发送到需要dns服务器的地址时它正在工作......

不幸的是,我没有关于此错误的任何其他信息...