Skip to content

Commit 8343923

Browse files
committed
Return error from handler
1 parent 19fcfac commit 8343923

File tree

3 files changed

+53
-27
lines changed

3 files changed

+53
-27
lines changed

site/embed.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,15 @@ func Handler(logger slog.Logger) http.Handler {
4141
}
4242
}
4343

44-
nextRouterHandler := nextrouter.Handler(filesystem, &nextrouter.Options{
44+
nextRouterHandler, err := nextrouter.Handler(filesystem, &nextrouter.Options{
4545
Logger: logger,
4646
TemplateDataFunc: templateFunc,
4747
})
48+
if err != nil {
49+
// There was an error setting up our file system handler.
50+
// This likely means a problem with our embedded file system.
51+
panic(err)
52+
}
4853
return secureHeaders(nextRouterHandler)
4954
}
5055

site/nextrouter/nextrouter.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ type HTMLTemplateHandler func(*http.Request) interface{}
3333
//
3434
// 1) If a file is of the form `[org]`, it's a dynamic route for a single-parameter
3535
// 2) If a file is of the form `[[...any]]`, it's a dynamic route for any parameters
36-
func Handler(fileSystem fs.FS, options *Options) http.Handler {
36+
func Handler(fileSystem fs.FS, options *Options) (http.Handler, error) {
3737
if options == nil {
3838
options = &Options{
3939
Logger: slog.Logger{},
@@ -43,7 +43,10 @@ func Handler(fileSystem fs.FS, options *Options) http.Handler {
4343
router := chi.NewRouter()
4444

4545
// Build up a router that matches NextJS routing rules, for HTML files
46-
registerRoutes(router, fileSystem, *options)
46+
err := registerRoutes(router, fileSystem, *options)
47+
if err != nil {
48+
return nil, err
49+
}
4750

4851
// Fallback to static file server for non-HTML files
4952
// Non-HTML files don't have special routing rules, so we can just leverage
@@ -52,22 +55,21 @@ func Handler(fileSystem fs.FS, options *Options) http.Handler {
5255
router.NotFound(fileHandler.ServeHTTP)
5356

5457
// Finally, if there is a 404.html available, serve that
55-
err := register404(fileSystem, router, *options)
56-
if (err != nil) {
58+
err = register404(fileSystem, router, *options)
59+
if err != nil {
5760
// An error may be expected if a 404.html is not present
5861
options.Logger.Warn(context.Background(), "Unable to find 404.html", slog.Error(err))
5962
}
6063

61-
return router
64+
return router, nil
6265
}
6366

6467
// registerRoutes recursively traverses the file-system, building routes
6568
// as appropriate for respecting NextJS dynamic rules.
66-
func registerRoutes(rtr chi.Router, fileSystem fs.FS, options Options) {
69+
func registerRoutes(rtr chi.Router, fileSystem fs.FS, options Options) error {
6770
files, err := fs.ReadDir(fileSystem, ".")
6871
if err != nil {
69-
options.Logger.Warn(context.Background(), "Provided filesystem is empty; unable to build routes")
70-
return
72+
return err
7173
}
7274

7375
// Loop through everything in the current directory...
@@ -84,8 +86,7 @@ func registerRoutes(rtr chi.Router, fileSystem fs.FS, options Options) {
8486
// recursively calling `buildRouter`
8587
sub, err := fs.Sub(fileSystem, name)
8688
if err != nil {
87-
options.Logger.Error(context.Background(), "Unable to call fs.Sub on directory", slog.F("directory_name", name))
88-
continue
89+
return err
8990
}
9091

9192
// In the special case where the folder is dynamic,
@@ -98,9 +99,14 @@ func registerRoutes(rtr chi.Router, fileSystem fs.FS, options Options) {
9899

99100
options.Logger.Debug(context.Background(), "Registering route", slog.F("name", name), slog.F("routeName", routeName))
100101
rtr.Route("/"+routeName, func(r chi.Router) {
101-
registerRoutes(r, sub, options)
102+
err := registerRoutes(r, sub, options)
103+
if err != nil {
104+
options.Logger.Error(context.Background(), "Error registering route", slog.F("name", routeName), slog.Error(err))
105+
}
102106
})
103107
}
108+
109+
return nil
104110
}
105111

106112
// serveFile is responsible for serving up HTML files in our next router

site/nextrouter/nextrouter_test.go

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ func TestNextRouter(t *testing.T) {
2424
err := rootFS.WriteFile("test.html", []byte("test123"), 0755)
2525
require.NoError(t, err)
2626

27-
router := nextrouter.Handler(rootFS, nil)
27+
router, err := nextrouter.Handler(rootFS, nil)
28+
require.NoError(t, err)
2829
server := httptest.NewServer(router)
2930

3031
res, err := request(server, "/test.html")
@@ -46,7 +47,8 @@ func TestNextRouter(t *testing.T) {
4647
err = rootFS.WriteFile("folder.html", []byte("folderFile"), 0755)
4748
require.NoError(t, err)
4849

49-
router := nextrouter.Handler(rootFS, nil)
50+
router, err := nextrouter.Handler(rootFS, nil)
51+
require.NoError(t, err)
5052
server := httptest.NewServer(router)
5153

5254
res, err := request(server, "/folder/")
@@ -65,7 +67,8 @@ func TestNextRouter(t *testing.T) {
6567
err := rootFS.WriteFile("test.png", []byte("png-bytes"), 0755)
6668
require.NoError(t, err)
6769

68-
router := nextrouter.Handler(rootFS, nil)
70+
router, err := nextrouter.Handler(rootFS, nil)
71+
require.NoError(t, err)
6972
server := httptest.NewServer(router)
7073

7174
res, err := request(server, "/test.png")
@@ -85,7 +88,8 @@ func TestNextRouter(t *testing.T) {
8588
err := rootFS.WriteFile("test.html", []byte("test-no-extension"), 0755)
8689
require.NoError(t, err)
8790

88-
router := nextrouter.Handler(rootFS, nil)
91+
router, err := nextrouter.Handler(rootFS, nil)
92+
require.NoError(t, err)
8993
server := httptest.NewServer(router)
9094

9195
res, err := request(server, "/test")
@@ -104,7 +108,8 @@ func TestNextRouter(t *testing.T) {
104108
err := rootFS.WriteFile("index.html", []byte("test-root-index"), 0755)
105109
require.NoError(t, err)
106110

107-
router := nextrouter.Handler(rootFS, nil)
111+
router, err := nextrouter.Handler(rootFS, nil)
112+
require.NoError(t, err)
108113
server := httptest.NewServer(router)
109114

110115
res, err := request(server, "/")
@@ -128,7 +133,8 @@ func TestNextRouter(t *testing.T) {
128133
rootFS.WriteFile("test/a/b/c.html", []byte("test123"), 0755)
129134
require.NoError(t, err)
130135

131-
router := nextrouter.Handler(rootFS, nil)
136+
router, err := nextrouter.Handler(rootFS, nil)
137+
require.NoError(t, err)
132138
server := httptest.NewServer(router)
133139

134140
res, err := request(server, "/test/a/b/c.html")
@@ -155,7 +161,8 @@ func TestNextRouter(t *testing.T) {
155161
rootFS.WriteFile("test/a/b/c/index.html", []byte("test-abc-index"), 0755)
156162
require.NoError(t, err)
157163

158-
router := nextrouter.Handler(rootFS, nil)
164+
router, err := nextrouter.Handler(rootFS, nil)
165+
require.NoError(t, err)
159166
server := httptest.NewServer(router)
160167

161168
res, err := request(server, "/test/a/b/c")
@@ -175,7 +182,8 @@ func TestNextRouter(t *testing.T) {
175182
err := rootFS.WriteFile("test.html", []byte("test123"), 0755)
176183
require.NoError(t, err)
177184

178-
router := nextrouter.Handler(rootFS, nil)
185+
router, err := nextrouter.Handler(rootFS, nil)
186+
require.NoError(t, err)
179187
server := httptest.NewServer(router)
180188

181189
res, err := request(server, "/test-non-existent.html")
@@ -191,7 +199,8 @@ func TestNextRouter(t *testing.T) {
191199
err := rootFS.WriteFile("test.html", []byte("test123"), 0755)
192200
require.NoError(t, err)
193201

194-
router := nextrouter.Handler(rootFS, nil)
202+
router, err := nextrouter.Handler(rootFS, nil)
203+
require.NoError(t, err)
195204
server := httptest.NewServer(router)
196205

197206
res, err := request(server, "/test-non-existent.html")
@@ -207,7 +216,8 @@ func TestNextRouter(t *testing.T) {
207216
err := rootFS.WriteFile("404.html", []byte("404 custom content"), 0755)
208217
require.NoError(t, err)
209218

210-
router := nextrouter.Handler(rootFS, nil)
219+
router, err := nextrouter.Handler(rootFS, nil)
220+
require.NoError(t, err)
211221
server := httptest.NewServer(router)
212222

213223
res, err := request(server, "/test-non-existent.html")
@@ -227,7 +237,8 @@ func TestNextRouter(t *testing.T) {
227237
err = rootFS.WriteFile("folder/[orgs].html", []byte("test-dynamic-path"), 0755)
228238
require.NoError(t, err)
229239

230-
router := nextrouter.Handler(rootFS, nil)
240+
router, err := nextrouter.Handler(rootFS, nil)
241+
require.NoError(t, err)
231242
server := httptest.NewServer(router)
232243

233244
res, err := request(server, "/folder/org-1")
@@ -248,7 +259,8 @@ func TestNextRouter(t *testing.T) {
248259
err = rootFS.WriteFile("folder/[org]/[project]/create.html", []byte("test-create"), 0755)
249260
require.NoError(t, err)
250261

251-
router := nextrouter.Handler(rootFS, nil)
262+
router, err := nextrouter.Handler(rootFS, nil)
263+
require.NoError(t, err)
252264
server := httptest.NewServer(router)
253265

254266
res, err := request(server, "/folder/org-1/project-1/create")
@@ -269,7 +281,8 @@ func TestNextRouter(t *testing.T) {
269281
err = rootFS.WriteFile("folder/[[...any]].html", []byte("test-catch-all"), 0755)
270282
require.NoError(t, err)
271283

272-
router := nextrouter.Handler(rootFS, nil)
284+
router, err := nextrouter.Handler(rootFS, nil)
285+
require.NoError(t, err)
273286
server := httptest.NewServer(router)
274287

275288
res, err := request(server, "/folder/org-1/project-1/random")
@@ -292,7 +305,8 @@ func TestNextRouter(t *testing.T) {
292305
err = rootFS.WriteFile("folder/create.html", []byte("test-create"), 0755)
293306
require.NoError(t, err)
294307

295-
router := nextrouter.Handler(rootFS, nil)
308+
router, err := nextrouter.Handler(rootFS, nil)
309+
require.NoError(t, err)
296310
server := httptest.NewServer(router)
297311

298312
res, err := request(server, "/folder/create")
@@ -329,10 +343,11 @@ func TestNextRouter(t *testing.T) {
329343
}
330344
}
331345

332-
router := nextrouter.Handler(rootFS, &nextrouter.Options{
346+
router, err := nextrouter.Handler(rootFS, &nextrouter.Options{
333347
Logger: slog.Logger{},
334348
TemplateDataFunc: templateFunc,
335349
})
350+
require.NoError(t, err)
336351
server := httptest.NewServer(router)
337352

338353
res, err := request(server, "/test.html")

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy