Ошибка получения cURL: пустой ответ от сервера - PullRequest
0 голосов
/ 05 февраля 2019

Мне было интересно об этом, когда я вызываю один из API узла js, используя cURL из сценария PHP, я сделал console.log() на сервере, и он показывает, что получил полезную нагрузку и возвращенный ответ, как показано ниже, но в моем сценарии PHP этопоказывает ошибку cURL как Empty reply from server

PHP-код:

$payload = json_encode(array('message_id' => 'test'));
  $ch = curl_init(URL);
  curl_setopt($ch, CURLOPT_URL, URL);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Content-Length: ' . strlen($payload)));
  // curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
  $response   = curl_exec($ch);
  $curl_errno = curl_errno($ch);
  $curl_err   = curl_error($ch);
  $info       = curl_getinfo($ch);

Ответ сервера:

{ message_id: 'test' }
Executing (default): SELECT count(*) AS `count` FROM `messagenumbermaster` AS `messagenumbermaster` WHERE `messagenumbermaster`.`messagenumber` = 'test';

в возвращаемом значении: Новое

Iтакже получил [http_code] => 0 в curl_getinfo() Я много искал, но не было удачи, пожалуйста, помогите мне.

Код узла js:

module.exports.checkDuplicate = {

  auth: false,
  validate: {
    payload: joi.object().required().keys({
      message_id: joi.string().required()
    })
  },
  handler: ((req, res) => {
    console.log(req.payload);
    try {
      return emailrdb.messagenumbermaster.count({
        where: {
          messagenumber: req.payload.message_id
        }
      })
      .then(count => {
        console.log('in then');
        if(count > 0){
          //duplicate
          console.log('resturned value: duplicate');
          return 'duplicate';
        }else{
          console.log('resturned value: New');
          return 'New';
        }
      })
    } catch (err) {
      console.log("checkDuplicate: ErrorLog", err);
      Log.createLog(`${new Date()}- checkDuplicate error: ${err}`);
      throw boom.boomify(err.message);
    }
  })
};

Я получил ответ при попытке от RESTer,Примечание: я использую PHP и Node от localhost

1 Ответ

0 голосов
/ 05 февраля 2019

Поскольку вы звоните return 'New'; из другой области. Вы возвращаетесь из then..., но обработчик хапи все еще ожидает возврата, который не вызывается.

Вы не можете достичь внешней области, выполнив return из внутреннего объема.

Так проверьте этот код:

module.exports.checkDuplicate = {

  auth: false,

  validate: {
    payload: {
      message_id: joi.string().required()
    }
  },

  handler: async (req, res) => {
    try {
      const {message_id} = req.payload;

      const query = {
        where: {
          messagenumber: message_id
        }
      };
      const model = emailrdb.messagenumbermaster;
      const count = await model.count(query);

      // returning json response with fields: payload, message_id, result, duplicate, count
      return res.response({
               payload: req.payload,
               message_id,
               result: (count > 0 ? 'duplicate' : 'new'), 
               duplicate: count > 0, 
               count
             }).code(200);
      // return res({...}).code(200); // for hapi v16
    } 
    catch (error) {
      console.error('Got exception during "checkDuplicate" call. Backtrace:', error);
      Log.createLog(`${new Date()} - checkDuplicate error: ${err.message}`);
      throw boom.boomify(err.message);
    }
  }
};
...