Я задавался вопросом об этом, так как я вызываю один из 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';
затем возвращаемое значение: новый
Я также получил [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 с локального хоста
Так как ты звонишь 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);
}
}
};
Других решений пока нет …