diff --git a/src/fib.ts b/src/fib.ts index 8dc8ddd..9b03aa1 100644 --- a/src/fib.ts +++ b/src/fib.ts @@ -1,12 +1,12 @@ // util function that computes the fibonacci numbers -module.exports = function fibonacci(n) { +export function fibonacci(n: number): number { if (n < 0) { return -1; - } else if (n == 0) { + } else if (n === 0) { return 0; - } else if (n == 1) { + } else if (n === 1) { return 1; } return fibonacci(n - 1) + fibonacci(n - 2); -}; +} \ No newline at end of file diff --git a/src/fibRoute.ts b/src/fibRoute.ts index 2d41ca5..dc7d5d6 100644 --- a/src/fibRoute.ts +++ b/src/fibRoute.ts @@ -1,16 +1,31 @@ // Endpoint for querying the fibonacci numbers -const fibonacci = require("./fib"); +import { fibonacci } from "./fib"; -export default (req, res) => { - const { num } = req.params; +// Import types +type Req = { params: { num?: string } }; +type Res = { status: (code: number) => Res; send: (msg: string) => void }; - const fibN = fibonacci(parseInt(num)); - let result = `fibonacci(${num}) is ${fibN}`; +export default function fibRoute(req: Req, res: Res): void { + const numParam = req.params.num; // no more unsafe access + if (!(typeof numParam === "string" )) { + res.status(401).send("Missing 'num'"); + return; + } - if (fibN < 0) { - result = `fibonacci(${num}) is undefined`; + const n = parseInt(numParam, 10); // turn into base10 int + if (Number.isNaN(n)) { + res.status(402).send(`Invalid number: "${numParam}"`); + return; } + const retVal = fibonacci(n); + let result = ""; + // serialize + if (retVal < 0) { + result = `fibonacci(${n}) is undefined`; + } else { + result = `fibonacci(${n}) is ${retVal}`; + } res.send(result); -}; +} \ No newline at end of file