【问题标题】:sync-request with post parameter not working带有 post 参数的同步请求不起作用
【发布时间】:2021-03-31 08:22:54
【问题描述】:

我必须从 nodjs 应用程序发出同步请求。我找到了同步请求https://www.npmjs.com/package/sync-request 用于发出同步请求。但是当我使用下面的代码时,我在返回数据时遇到了一些错误。

<b>Notice</b>:  Undefined index: rpi_id in <b>get_data.php</b> on line <b>8</b><br />

下面是nodjs代码。

var data_id ="data_1";
var url = "https://example.com/get_data.php";
  var request = require('sync-request');
  var res = request('POST', url, {
    json: {
    'rpi_id': data_id,
  },
    
  });

  // var data = JSON.parse(res.getBody('utf8'));
   console.log(res.getBody('utf8'))

和php代码。

<?php

$data = $_POST;
$rpi_id = $data['rpi_id'];

$res=array('Response'=>'OK','Data'=>$rpi_id);
echo json_encode($res);

?>

【问题讨论】:

    标签: javascript php node.js post


    【解决方案1】:

    问题在于您如何在 PHP 端解码请求。 The PHP's $_POST has only application/x-www-form-urlencoded or multipart/form-data content-type,而不是 application/json 内容类型的 JSON。

    要在 PHP 中获取 JSON 对象,您应该执行以下操作:

    $json = file_get_contents('php://input'); 
    $data = json_decode($json);
    $rpi_id = $data['rpi_id'];
    

    【讨论】:

      【解决方案2】:

      我建议你开始使用 es2017 并使用 async/await。 Http 请求通常是异步的,因为它们具有获取外部资源的性质,因此您可以等待异步调用的响应。

      例子:

      const got = require('got');
      const url = "https://example.com/get_data.php";
      const data_id = "data_1";
      
      const execRequest = async (url, body) => {
          return got.post(url, {
              json: body,
              responseType: 'json'
          }
      }
      
      const result = await execRequest(url, {'rpi_id': data_id});
      
      console.log(result.data); //contains your response
      

      您可以在此处阅读/了解有关async/await 和got 的更多信息

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 欢迎来到 Stack Overflow。你能解释一下你的答案来帮助大家吗?
        • 我们只是在缓冲区中进行字符串转换
        猜你喜欢
        • 2018-04-22
        • 1970-01-01
        • 2021-02-26
        • 2018-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多