Skip to content

Commit 24ad244

Browse files
fix: error when no Response instance is returned (#2924)
Fixes #1494
1 parent a49fc37 commit 24ad244

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/app.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,10 +295,19 @@ export class App<State> {
295295
}
296296

297297
try {
298+
let result: unknown;
298299
if (handlers.length === 1 && handlers[0].length === 1) {
299-
return handlers[0][0](ctx);
300+
result = await handlers[0][0](ctx);
301+
} else {
302+
result = await runMiddlewares(handlers, ctx);
300303
}
301-
return await runMiddlewares(handlers, ctx);
304+
if (!(result instanceof Response)) {
305+
throw new Error(
306+
`Expected a "Response" instance to be returned, but got: ${result}`,
307+
);
308+
}
309+
310+
return result;
302311
} catch (err) {
303312
if (err instanceof HttpError) {
304313
if (err.status >= 500) {

src/app_test.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,3 +486,18 @@ Deno.test("FreshApp - support setting request init in ctx.render()", async () =>
486486
expect(res.status).toEqual(416);
487487
expect(res.headers.get("X-Foo")).toEqual("foo");
488488
});
489+
490+
Deno.test("FreshApp - throw when middleware returns no response", async () => {
491+
const app = new App<{ text: string }>()
492+
.get(
493+
"/",
494+
// deno-lint-ignore no-explicit-any
495+
(() => {}) as any,
496+
);
497+
498+
const server = new FakeServer(app.handler());
499+
const res = await server.get("/");
500+
const text = await res.text();
501+
expect(res.status).toEqual(500);
502+
expect(text).toContain("Internal server error");
503+
});

0 commit comments

Comments
 (0)