From 09a807af171e4cbb6c94ee9ca426382845d55856 Mon Sep 17 00:00:00 2001 From: Akshay Kaushik Date: Mon, 19 Jan 2026 13:11:25 +0000 Subject: [PATCH 1/2] Added Error handling as tabs were not rendering data on sudden switching of tabs --- Backend-Node/routes/api.js | 27 +++++++++++++++------------ Backend-Node/server.js | 8 ++++++++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Backend-Node/routes/api.js b/Backend-Node/routes/api.js index 4aa9cac..bc48ad7 100644 --- a/Backend-Node/routes/api.js +++ b/Backend-Node/routes/api.js @@ -19,6 +19,9 @@ const { LookerNodeSDK } = require("@looker/sdk-node"); const sdk = LookerNodeSDK.init40(); var createSignedUrl = require("../auth/auth_utils"); +const catchAsync = (fn) => (req, res, next) => { + fn(req, res, next).catch(next); +}; /***************************************** * Authentication * @@ -27,7 +30,7 @@ var createSignedUrl = require("../auth/auth_utils"); /** * Create an API auth token based on the provided embed user credentials */ -router.get("/embed-user/token", async (req, res) => { +router.get("/embed-user/token", catchAsync(async (req, res) => { const userCred = await sdk.ok(sdk.user_for_credential("embed", req.query.id)); const embed_user_token = await sdk.login_user(userCred.id.toString()); const u = { @@ -35,12 +38,12 @@ router.get("/embed-user/token", async (req, res) => { token_last_refreshed: Date.now(), }; res.json({ ...u }); -}); +})); /** * Update the embed users permissions */ -router.post("/embed-user/:id/update", async (req, res) => { +router.post("/embed-user/:id/update", catchAsync(async (req, res) => { const userCred = await sdk.ok( sdk.user_for_credential("embed", req.params.id) ); @@ -49,7 +52,7 @@ router.post("/embed-user/:id/update", async (req, res) => { }; await sdk.set_user_attribute_user_value(userCred.id, 23, attrs); res.json({ status: "updated" }); -}); +})); /** * Create a signed URL for embedding content @@ -68,7 +71,7 @@ router.get("/auth", (req, res) => { * Endpoint for signing an embed URL. Embed SSO parameters can be passed in as * part of the body */ -router.post("/sso-url", async (req, res) => { +router.post("/sso-url", catchAsync(async (req, res) => { const body = req.body; const targetUrl = body.target_url; const response = { @@ -76,7 +79,7 @@ router.post("/sso-url", async (req, res) => { }; res.setHeader("Content-Type", "application/json"); res.status(200).send(response); -}); +})); /**************************************** * Backend Data API calls * @@ -85,25 +88,25 @@ router.post("/sso-url", async (req, res) => { /** * Get details of the current authenticated user */ -router.get("/me", async (req, res, next) => { +router.get("/me", catchAsync(async (req, res, next) => { const me = await sdk.ok(sdk.me()).catch((e) => console.log(e)); res.send(me); -}); +})); /** * Get a list of all looks the authenticated user can access */ -router.get("/looks", async (req, res, next) => { +router.get("/looks", catchAsync(async (req, res, next) => { const looks = await sdk .ok(sdk.all_looks("id,title,embed_url,query_id")) .catch((e) => console.log(e)); res.send(looks); -}); +})); /** * Run the query associated with a look, and return that data as a json response */ -router.get("/looks/:id", async (req, res, next) => { +router.get("/looks/:id", catchAsync(async (req, res, next) => { let target_look = req.params.id; let query_data = await sdk .ok(sdk.look(target_look, "query")) @@ -121,6 +124,6 @@ router.get("/looks/:id", async (req, res, next) => { res.send({ error: e.message }); }); res.send(newQueryResults); -}); +})); module.exports = router; diff --git a/Backend-Node/server.js b/Backend-Node/server.js index dfeefbb..74f9910 100644 --- a/Backend-Node/server.js +++ b/Backend-Node/server.js @@ -32,5 +32,13 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/api', apiRouter); +app.use((err, res) => { + const status = err.statusCode || 500; + const message = err.message || 'Internal Server Error'; + res.status(status).json({ + error: true, + message: message + }); +}); module.exports = app; From 6672c1274841539002a9cf0d2090ef32da2a4b43 Mon Sep 17 00:00:00 2001 From: Akshay Kaushik Date: Thu, 22 Jan 2026 04:46:03 +0000 Subject: [PATCH 2/2] fixed gemini code review suggetions --- Backend-Node/routes/api.js | 6 ++---- Backend-Node/server.js | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Backend-Node/routes/api.js b/Backend-Node/routes/api.js index bc48ad7..539e538 100644 --- a/Backend-Node/routes/api.js +++ b/Backend-Node/routes/api.js @@ -89,7 +89,7 @@ router.post("/sso-url", catchAsync(async (req, res) => { * Get details of the current authenticated user */ router.get("/me", catchAsync(async (req, res, next) => { - const me = await sdk.ok(sdk.me()).catch((e) => console.log(e)); + const me = await sdk.ok(sdk.me()); res.send(me); })); @@ -97,9 +97,7 @@ router.get("/me", catchAsync(async (req, res, next) => { * Get a list of all looks the authenticated user can access */ router.get("/looks", catchAsync(async (req, res, next) => { - const looks = await sdk - .ok(sdk.all_looks("id,title,embed_url,query_id")) - .catch((e) => console.log(e)); + const looks = await sdk.ok(sdk.all_looks("id,title,embed_url,query_id")) res.send(looks); })); diff --git a/Backend-Node/server.js b/Backend-Node/server.js index 74f9910..f92bec3 100644 --- a/Backend-Node/server.js +++ b/Backend-Node/server.js @@ -32,7 +32,7 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/api', apiRouter); -app.use((err, res) => { +app.use((err, req, res, next) => { const status = err.statusCode || 500; const message = err.message || 'Internal Server Error'; res.status(status).json({