Node.js тайм-аут с requesttify POST

Я пытаюсь запросить статус пользователя, с POST из node.js в файл PHP. Моя проблема в том, что веб-служба, которую я вызываю, ОЧЕНЬ медленно отвечает (4 секунды), поэтому я думаю, что.then завершает работу раньше, чем через 4 секунды, и поэтому ничего не возвращает. Есть идеи, если я могу продлить время для запроса?

requestify.post('https://example.com/', {
              email: 'foo@bar.com'
            })
            .then(function(response) {
                var answer = response.getBody();
                console.log("answer:" + answer);
            });

2 ответа

Я не настолько хорошо осведомлен о requesttify, но вы уверены, что можете использовать почту по адресу https? В readme only requesttify.request(...) использует адрес https в качестве примера. ( см. readme)

Один совет, который я могу точно дать вам, - это всегда выполнять ваше обещание:

requestify.get(URL).then(function(response) {
    console.log(response.getBody())
}).catch(function(err){
    console.log('Requestify Error', err);
    next(err);
});

Это должно как минимум дать вам ошибку вашего обещания, и вы можете указать свою проблему.

Каждый вызов Requestify позволяет вам пройти через Options объект, определение этого объекта описано здесь: Requestify API Reference

Вы используете short метод для POST, так что сначала я покажу это, но этот же синтаксис будет работать для put также обратите внимание, что get, delete, head не принимайте аргумент данных, вы отправляете параметры запроса через params свойство config.

requestify.post(url, data, config)
requestify.put(url, data, config)
requestify.get(url, config)
requestify.delete(url, config)
requestify.head(url, config)

Сейчас, config имеет timeout имущество

тайм-аут {число}

Установите время ожидания (в миллисекундах) для запроса.

Таким образом, мы можем указать время ожидания 60 секунд с помощью этого синтаксиса:

var config = {};
config.timeout = 60000;
requestify.post(url, data, config)

или встроенный:

requestify.post(url, data, { timeout: 60000 })

Итак, давайте теперь соберем это вместе в ваш первоначальный запрос:

как указывал @Jabalaja, вы должны перехватывать любые сообщения об исключениях, однако вы должны делать это с аргументом ошибки в продолжении. (.then)

requestify.post('https://example.com/', {
    email: 'foo@bar.com'
}, {
    timeout: 60000
})
.then(function(response) {
    var answer = response.getBody();
    console.log("answer:" + answer);
}, function(error) {
    var errorMessage = "Post Failed";
    if(error.code && error.body)
        errorMessage += " - " + error.code + ": " + error.body
    console.log(errorMessage);
    // dump the full object to see if you can formulate a better error message.
    console.log(error);
});
Другие вопросы по тегам