Skip to content

Commit a64fa38

Browse files
committed
[INTERNAL] MiddlewareRepository: Add error handling for failing require
1 parent c71d23a commit a64fa38

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

lib/middleware/middlewareRepository.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const middlewares = {
1+
const middlewareInfos = {
22
compression: {path: "compression"},
33
cors: {path: "cors"},
44
csp: {path: "./csp"},
@@ -13,22 +13,28 @@ const middlewares = {
1313
};
1414

1515
function getMiddleware(middlewareName) {
16-
const middlewareInfo = middlewares[middlewareName];
16+
const middlewareInfo = middlewareInfos[middlewareName];
1717

1818
if (!middlewareInfo) {
1919
throw new Error(`middlewareRepository: Unknown Middleware ${middlewareName}`);
2020
}
21-
return {
22-
middleware: require(middlewareInfo.path),
23-
specVersion: middlewareInfo.specVersion
24-
};
21+
try {
22+
const middleware = require(middlewareInfo.path);
23+
return {
24+
middleware,
25+
specVersion: middlewareInfo.specVersion
26+
};
27+
} catch (err) {
28+
throw new Error(
29+
`middlewareRepository: Failed to require middleware module for ${middlewareName}: ${err.message}`);
30+
}
2531
}
2632

2733
function addMiddleware({name, specVersion, middlewarePath}) {
28-
if (middlewares[name]) {
34+
if (middlewareInfos[name]) {
2935
throw new Error(`middlewareRepository: A middleware with the name ${name} has already been registered`);
3036
}
31-
middlewares[name] = {
37+
middlewareInfos[name] = {
3238
path: middlewarePath,
3339
specVersion
3440
};

test/lib/server/middleware/middlewareRepository.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,18 @@ test("addMiddleware: Duplicate middleware", async (t) => {
4444
"middlewareRepository: A middleware with the name cors has already been registered",
4545
"Threw error with correct message");
4646
});
47+
48+
test("addMiddleware: Middleware with invalid path", (t) => {
49+
middlewareRepository.addMiddleware({
50+
name: "🙅",
51+
specVersion: "2.0",
52+
middlewarePath: "/path/does/not/exist"
53+
});
54+
const error = t.throws(() => {
55+
middlewareRepository.getMiddleware("🙅");
56+
}, Error);
57+
t.regex(error.message,
58+
new RegExp("^middlewareRepository: Failed to require middleware module for 🙅: " +
59+
"Cannot find module '/path/does/not/exist'"),
60+
"Error message starts with expected text");
61+
});

0 commit comments

Comments
 (0)