From 9d26559ed257b8e5d125d5058917364f1a500e7a Mon Sep 17 00:00:00 2001 From: Greg Jopa <534034+gregjopa@users.noreply.github.com> Date: Mon, 20 Jun 2022 13:07:34 -0500 Subject: [PATCH] feat: add server-side error handling --- advanced-integration/paypal-api.js | 26 ++++++++++++++++++-------- advanced-integration/server.js | 24 ++++++++++++++++++------ standard-integration/paypal-api.js | 22 ++++++++++++++++------ standard-integration/server.js | 16 ++++++++++++---- 4 files changed, 64 insertions(+), 24 deletions(-) diff --git a/advanced-integration/paypal-api.js b/advanced-integration/paypal-api.js index bad77dc2..082e2630 100644 --- a/advanced-integration/paypal-api.js +++ b/advanced-integration/paypal-api.js @@ -27,8 +27,8 @@ export async function createOrder() { ], }), }); - const data = await response.json(); - return data; + + return handleResponse(response); } // capture payment for an order @@ -42,8 +42,8 @@ export async function capturePayment(orderId) { Authorization: `Bearer ${accessToken}`, }, }); - const data = await response.json(); - return data; + + return handleResponse(response); } // generate access token @@ -56,8 +56,8 @@ export async function generateAccessToken() { Authorization: `Basic ${auth}`, }, }); - const data = await response.json(); - return data.access_token; + const jsonData = await handleResponse(response); + return jsonData.access_token; } // generate client token @@ -71,6 +71,16 @@ export async function generateClientToken() { "Content-Type": "application/json", }, }); - const data = await response.json(); - return data.client_token; + console.log('response', response.status) + const jsonData = await handleResponse(response); + return jsonData.client_token; +} + +async function handleResponse(response) { + if (response.status === 200 || response.status === 201) { + return response.json(); + } + + const errorMessage = await response.text(); + throw new Error(errorMessage); } diff --git a/advanced-integration/server.js b/advanced-integration/server.js index 04882cb4..e8069220 100644 --- a/advanced-integration/server.js +++ b/advanced-integration/server.js @@ -9,21 +9,33 @@ app.use(express.static("public")); // render checkout page with client id & unique client token app.get("/", async (req, res) => { const clientId = process.env.CLIENT_ID; - const clientToken = await paypal.generateClientToken(); - res.render("checkout", { clientId, clientToken }); + try { + const clientToken = await paypal.generateClientToken(); + res.render("checkout", { clientId, clientToken }); + } catch (err) { + res.status(500).send(err.message); + } }); // create order app.post("/api/orders", async (req, res) => { - const order = await paypal.createOrder(); - res.json(order); + try { + const order = await paypal.createOrder(); + res.json(order); + } catch (err) { + res.status(500).send(err.message); + } }); // capture payment app.post("/api/orders/:orderID/capture", async (req, res) => { const { orderID } = req.params; - const captureData = await paypal.capturePayment(orderID); - res.json(captureData); + try { + const captureData = await paypal.capturePayment(orderID); + res.json(captureData); + } catch (err) { + res.status(500).send(err.message); + } }); app.listen(8888); diff --git a/standard-integration/paypal-api.js b/standard-integration/paypal-api.js index 4c5fab64..35cca914 100644 --- a/standard-integration/paypal-api.js +++ b/standard-integration/paypal-api.js @@ -24,8 +24,8 @@ export async function createOrder() { ], }), }); - const data = await response.json(); - return data; + + return handleResponse(response); } export async function capturePayment(orderId) { @@ -38,8 +38,8 @@ export async function capturePayment(orderId) { Authorization: `Bearer ${accessToken}`, }, }); - const data = await response.json(); - return data; + + return handleResponse(response); } export async function generateAccessToken() { @@ -51,6 +51,16 @@ export async function generateAccessToken() { Authorization: `Basic ${auth}`, }, }); - const data = await response.json(); - return data.access_token; + + const jsonData = await handleResponse(response); + return jsonData.access_token; +} + +async function handleResponse(response) { + if (response.status === 200 || response.status === 201) { + return response.json(); + } + + const errorMessage = await response.text(); + throw new Error(errorMessage); } diff --git a/standard-integration/server.js b/standard-integration/server.js index 8d52a2c7..d9d40db4 100644 --- a/standard-integration/server.js +++ b/standard-integration/server.js @@ -7,14 +7,22 @@ const app = express(); app.use(express.static("public")); app.post("/api/orders", async (req, res) => { - const order = await paypal.createOrder(); - res.json(order); + try { + const order = await paypal.createOrder(); + res.json(order); + } catch (err) { + res.status(500).send(err.message); + } }); app.post("/api/orders/:orderID/capture", async (req, res) => { const { orderID } = req.params; - const captureData = await paypal.capturePayment(orderID); - res.json(captureData); + try { + const captureData = await paypal.capturePayment(orderID); + res.json(captureData); + } catch (err) { + res.status(500).send(err.message); + } }); app.listen(8888);