Skip to content

Commit 8d55ac5

Browse files
committed
feat: add methodNotAllowedHandler to remove downstream boilerplate
1 parent e7180b6 commit 8d55ac5

File tree

12 files changed

+121
-96
lines changed

12 files changed

+121
-96
lines changed

examples/complete/node_modules/.bin/tsx

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/complete/node_modules/@mikro-orm/core

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/complete/node_modules/@mikro-orm/sqlite

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/complete/node_modules/@types/koa

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/complete/node_modules/mikro-orm-js-joda

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/complete/node_modules/tsx

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/complete/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"type": "module",
44
"dependencies": {
55
"@js-joda/core": "^5.6.1",
6-
"@mikro-orm/core": "^6.1.0",
7-
"@mikro-orm/sqlite": "^6.1.0",
6+
"@mikro-orm/core": "^6.1.7",
7+
"@mikro-orm/sqlite": "^6.1.7",
88
"flat": "^6.0.1",
99
"http-errors": "^2.0.0",
1010
"koa": "^2.15.0",
@@ -16,9 +16,9 @@
1616
},
1717
"devDependencies": {
1818
"@types/http-errors": "^2.0.4",
19-
"@types/koa": "^2.14.0",
19+
"@types/koa": "^2.15.0",
2020
"@types/koa-bodyparser": "^4.3.12",
21-
"tsx": "^4.7.0",
21+
"tsx": "^4.7.1",
2222
"typescript": "^5.3.3"
2323
},
2424
"scripts": {

examples/complete/src/index.ts

+4-32
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
import Koa from "koa";
22
import bodyParser from "koa-bodyparser";
33
import {
4-
JsonApiErrorBody,
54
jsonApiErrorMiddleware,
65
jsonApiRequestMiddleware,
6+
methodNotAllowedHandler,
77
} from "koa-jsonapi-zod";
88
import Router from "koa-tree-router";
99
import { registerRoutes } from "./route/index.js";
1010
import { requestContextMiddleware } from "./util/mikro-orm.js";
1111

1212
const app = new Koa();
1313

14-
app.use(
15-
jsonApiRequestMiddleware({
16-
excludedPaths: ["/health"],
17-
}),
18-
);
19-
14+
app.use(jsonApiRequestMiddleware());
2015
app.use(
2116
jsonApiErrorMiddleware({
2217
logError: (error, exposed) => {
@@ -27,10 +22,8 @@ app.use(
2722
},
2823
}),
2924
);
30-
3125
app.use(bodyParser());
3226

33-
// This is a non-resource endpoint, hence it was excluded from the `jsonApiMiddleware`
3427
app.use(async (context, next) => {
3528
if (context.url === "/health") {
3629
context.body = { status: "alive" };
@@ -40,30 +33,9 @@ app.use(async (context, next) => {
4033
return next();
4134
});
4235

43-
const router = new Router({
44-
onMethodNotAllowed: (context) => {
45-
if (context.response.headers.allow === "") {
46-
context.remove("allow");
47-
context.status = 404;
48-
context.body = new JsonApiErrorBody({
49-
status: "404",
50-
code: "not_found",
51-
title: "Resource not found",
52-
});
53-
return;
54-
}
55-
56-
context.status = 405;
57-
context.body = new JsonApiErrorBody({
58-
status: "405",
59-
code: "method_not_allowed",
60-
title: "Method not allowed",
61-
detail: `Allowed methods: ${context.response.headers.allow}`,
62-
});
63-
},
64-
});
65-
36+
const router = new Router({ onMethodNotAllowed: methodNotAllowedHandler });
6637
registerRoutes(router);
38+
6739
app.use(requestContextMiddleware);
6840
app.use(router.routes());
6941

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"@tsconfig/node20": "^20.1.2",
4545
"@types/content-type": "^1.1.8",
4646
"@types/http-errors": "^2.0.4",
47-
"@types/koa": "^2.14.0",
47+
"@types/koa": "^2.15.0",
4848
"@types/node": "^20.11.17",
4949
"@types/qs": "^6.9.11",
5050
"@vitest/coverage-v8": "^1.2.2",

0 commit comments

Comments
 (0)