2017-02-13 10 views
0

Я пытаюсь внедрить платежную систему в своем приложении, запустив отдельный сервер для обработки платежей с помощью braintree. Я не могу понять, как отправить сообщение клиенту (когда платеж поступил неправильно) для обработки клиентской части результата. Как я могу заставить моего клиента пойти в catch вместо того, чтобы потом основываться на result.success? Или как мне получить результат.success в моем. Then? На самом деле мой результат объект не имеет свойства, содержащее мой result.success (result.success является булевым)Отправка ошибки клиенту в качестве обратного вызова HTTP-запроса

Сервер:

router.post("/checkout", function (req, res) { 
    var nonceFromTheClient = req.body.payment_method_nonce; 
    var amount = req.body.amount; 

    gateway.transaction.sale({ 
     amount: amount, 
     paymentMethodNonce: nonceFromTheClient, 
    }, function (err, result) { 
     res.send(result.success); 
     console.log("purchase result: " + result.success); 
    }); 
}); 

Клиент:

fetch('https://test.herokuapp.com/checkout', { 
    method: "POST", 
    headers: { 
     'Content-Type': 'application/json' 
    }, 
    body: JSON.stringify({ payment_method_nonce: nonce, amount: this.props.amount }) 
    }).then((result) => { 
    console.log(result); 
    }).catch(() => { 
    alert("error"); 
    }); 
} 

ответ

1

Предполагая, что вы используете экспресс, вы можете отправить ответ со кодом состояния (в данном случае с ошибкой) следующим образом:

router.post("/checkout", function (req, res) { 
    var nonceFromTheClient = req.body.payment_method_nonce; 
    var amount = req.body.amount; 

    gateway.transaction.sale({ 
     amount: amount, 
     paymentMethodNonce: nonceFromTheClient, 
    }, function (err, result) { 
     if(err){ 
      res.status(401).send(err); //could be, 400, 401, 403, 404 etc. Depending of the error 
     }else{ 
      res.status(200).send(result.success); 
     } 
    }); 
}); 

И у вашего клиента

fetch('https://test.herokuapp.com/checkout', { 
    method: "POST", 
    headers: { 
     'Content-Type': 'application/json' 
    }, 
    body: JSON.stringify({ payment_method_nonce: nonce, amount: this.props.amount }) 
}).then((result) => { 
    console.log(result); 
}).catch((error) => { 
    console.log(error); 
}); 
+0

Спасибо за ваш ответ! Он все еще идет в .then() даже с кодом состояния 400. Но я могу получить код состояния от моего клиента в результате, поэтому я сделал свою логику там :) –

+0

Вы wlecome! Пробовали ли вы передать второй параметр функции fetch в своем клиенте, а не в .catch()? 'выборки ('https://test.herokuapp.com/checkout', { метод: "POST", заголовки: { 'Content-Type': 'приложения/JSON' }, тела: JSON . ((result) => { console.log (результат); }, (ошибка) => { console.log. (ошибка); }); ' – giankotarola