From 99e271a559d01a59cdda32c11e3a6582e0e04c49 Mon Sep 17 00:00:00 2001 From: cesare soldini Date: Wed, 21 Oct 2020 19:45:13 +0200 Subject: [PATCH 1/2] fix(error message): change error message to display stack and more information (#1459) --- src/utils/serve-functions.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utils/serve-functions.js b/src/utils/serve-functions.js index 97f4c37f546..8fd4f3c22e1 100644 --- a/src/utils/serve-functions.js +++ b/src/utils/serve-functions.js @@ -20,11 +20,15 @@ const { detectFunctionsBuilder } = require('./detect-functions-builder') const { getFunctions } = require('./get-functions') const { NETLIFYDEVLOG, NETLIFYDEVWARN, NETLIFYDEVERR } = require('./logo') +const formatJsError = (err) => `${err.name}: ${err.message}\n\t${err.stack.join('\n\t')}` +const formatLambdaLocalError = (err) => `${err.errorType}: ${err.errorMessage}\n\t${err.stackTrace.join('\n\t')}` + const handleErr = function (err, response) { response.statusCode = 500 - response.write(`${NETLIFYDEVERR} Function invocation failed: ${err.toString()}`) + const errorString = err instanceof Error ? formatJsError(err) : formatLambdaLocalError(err) + response.write(`Function invocation failed: ${errorString}`) response.end() - console.log(`${NETLIFYDEVERR} Error during invocation:`, err) + console.log(`${NETLIFYDEVERR} Function invocation failed:`, errorString) } const formatLambdaError = (err) => chalk.red(`${err.errorType}: ${err.errorMessage}`) From 7033257e0be7508c9f0c4f0ce7d7ecedab7dab2c Mon Sep 17 00:00:00 2001 From: erezrokah Date: Tue, 10 Nov 2020 17:36:55 +0100 Subject: [PATCH 2/2] fix(command-dev): improve functions error reporting and logging --- src/utils/serve-functions.js | 43 ++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/utils/serve-functions.js b/src/utils/serve-functions.js index 8fd4f3c22e1..ea8be6328fc 100644 --- a/src/utils/serve-functions.js +++ b/src/utils/serve-functions.js @@ -20,15 +20,12 @@ const { detectFunctionsBuilder } = require('./detect-functions-builder') const { getFunctions } = require('./get-functions') const { NETLIFYDEVLOG, NETLIFYDEVWARN, NETLIFYDEVERR } = require('./logo') -const formatJsError = (err) => `${err.name}: ${err.message}\n\t${err.stack.join('\n\t')}` -const formatLambdaLocalError = (err) => `${err.errorType}: ${err.errorMessage}\n\t${err.stackTrace.join('\n\t')}` +const formatLambdaLocalError = (err) => `${err.errorType}: ${err.errorMessage}\n ${err.stackTrace.join('\n ')}` const handleErr = function (err, response) { response.statusCode = 500 - const errorString = err instanceof Error ? formatJsError(err) : formatLambdaLocalError(err) - response.write(`Function invocation failed: ${errorString}`) - response.end() - console.log(`${NETLIFYDEVERR} Function invocation failed:`, errorString) + const errorString = typeof err === 'string' ? err : formatLambdaLocalError(err) + response.end(errorString) } const formatLambdaError = (err) => chalk.red(`${err.errorType}: ${err.errorMessage}`) @@ -39,24 +36,32 @@ const capitalize = function (t) { return t.replace(/(^\w|\s\w)/g, (string) => string.toUpperCase()) } +const validateLambdaResponse = (lambdaResponse) => { + if (lambdaResponse === undefined) { + return { error: 'lambda response was undefined. check your function code again' } + } + if (!Number(lambdaResponse.statusCode)) { + return { + error: `Your function response must have a numerical statusCode. You gave: $ ${lambdaResponse.statusCode}`, + } + } + if (lambdaResponse.body && typeof lambdaResponse.body !== 'string') { + return { error: `Your function response must have a string body. You gave: ${lambdaResponse.body}` } + } + + return {} +} + const createSynchronousFunctionCallback = function (response) { return function callbackHandler(err, lambdaResponse) { if (err) { return handleErr(err, response) } - if (lambdaResponse === undefined) { - return handleErr('lambda response was undefined. check your function code again.', response) - } - if (!Number(lambdaResponse.statusCode)) { - console.log( - `${NETLIFYDEVERR} Your function response must have a numerical statusCode. You gave: $`, - lambdaResponse.statusCode, - ) - return handleErr('Incorrect function response statusCode', response) - } - if (lambdaResponse.body && typeof lambdaResponse.body !== 'string') { - console.log(`${NETLIFYDEVERR} Your function response must have a string body. You gave:`, lambdaResponse.body) - return handleErr('Incorrect function response body', response) + + const { error } = validateLambdaResponse(lambdaResponse) + if (error) { + console.log(`${NETLIFYDEVERR} ${error}`) + return handleErr(error, response) } response.statusCode = lambdaResponse.statusCode