Skip to content

Commit

Permalink
catch errors in async handlers (#506)
Browse files Browse the repository at this point in the history
  • Loading branch information
fcaps authored Nov 30, 2023
1 parent 29b71cb commit 1b76c3e
Show file tree
Hide file tree
Showing 22 changed files with 56 additions and 18 deletions.
4 changes: 4 additions & 0 deletions ExpressApp.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
const express = require('express');
require('express-async-errors');

module.exports = express
2 changes: 1 addition & 1 deletion express.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const fafApp = require('./fafApp')
const express = require('express')
const express = require('./ExpressApp')
const app = express()

fafApp.setup(app)
Expand Down
2 changes: 1 addition & 1 deletion fafApp.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const appConfig = require('./config/app')
const express = require('express')
const express = require('./ExpressApp')
const bodyParser = require('body-parser')
const session = require('express-session')
const FileStore = require('session-file-store')(session)
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"connect-flash": "^0.1.1",
"dotenv": "16.3.1",
"express": "^4.18.1",
"express-async-errors": "^3.1.1",
"express-session": "^1.17.3",
"express-validator": "7.0.1",
"moment": "^2.29.4",
Expand Down
2 changes: 1 addition & 1 deletion routes/views/accountRouter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const express = require('express')
const express = require('../../ExpressApp')
const router = express.Router();
const middlewares = require('../middleware')

Expand Down
2 changes: 1 addition & 1 deletion routes/views/auth.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const appConfig = require('../../config/app')
const passport = require('passport')
const express = require("express")
const express = require('../../ExpressApp')
const router = express.Router()

router.get('/login', passport.authenticate(appConfig.oauth.strategy));
Expand Down
2 changes: 1 addition & 1 deletion routes/views/clanRouter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const express = require('express');
const express = require('../../ExpressApp')
const router = express.Router();

// This will be replaced soon, therefor I did not spend time on it
Expand Down
2 changes: 1 addition & 1 deletion routes/views/dataRouter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const express = require('express');
const express = require('../../ExpressApp')
const router = express.Router();
const {AcquireTimeoutError} = require('../../lib/MutexService');

Expand Down
2 changes: 1 addition & 1 deletion routes/views/defaultRouter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const express = require('express');
const express = require('../../ExpressApp')
const router = express.Router();

router.get('/', (req, res) => res.render('index'))
Expand Down
2 changes: 1 addition & 1 deletion routes/views/leaderboardRouter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const express = require('express');
const express = require('../../ExpressApp')
const router = express.Router();
const {AcquireTimeoutError} = require('../../lib/MutexService');
const middlewares = require('../middleware')
Expand Down
2 changes: 1 addition & 1 deletion routes/views/news.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const express = require('express');
const express = require('../../ExpressApp')
const router = express.Router();

function getNewsArticleBySlug(articles, slug) {
Expand Down
2 changes: 1 addition & 1 deletion routes/views/staticMarkdownRouter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const express = require('express')
const express = require('../../ExpressApp')
const showdown = require('showdown')
const fs = require('fs')
const router = express.Router()
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/IsAuthenticatedMiddleware.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Express = require('express')
const Express = require('../../ExpressApp')
const middlewares = require('../../routes/middleware')
const supertestSession = require('supertest-session')
const fafApp = require('../../fafApp')
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/NewsRouter.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Express = require('express')
const Express = require('../../ExpressApp')
const supertestSession = require('supertest-session')
const fafApp = require('../../fafApp')

Expand Down
2 changes: 1 addition & 1 deletion tests/integration/accountRouter.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Express = require('express')
const Express = require('../../ExpressApp')
const supertestSession = require('supertest-session')
const fafApp = require('../../fafApp')

Expand Down
28 changes: 28 additions & 0 deletions tests/integration/asyncErrorHandler.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const Express = require('../../ExpressApp')
const supertestSession = require('supertest-session')

let testApp = null
let testSession = null

beforeEach(() => {
const app = new Express()
testSession = supertestSession(app)
testApp = app
})

describe('Async Error Handler', function () {
test('route is protected and redirects to "/login"', async () => {
testApp.get('/', async () => {
throw new Error('test failed and node crashed')
})
testApp.use((err, req, res, next) => {
res.status(500).send('not crashed')
next(err)
})

const res = await testSession.get('/')

expect(res.status).toBe(500)
expect(res.text).toBe('not crashed')
})
})
2 changes: 1 addition & 1 deletion tests/integration/clanRouter.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Express = require('express')
const Express = require('../../ExpressApp')
const supertestSession = require('supertest-session')
const fafApp = require('../../fafApp')

Expand Down
2 changes: 1 addition & 1 deletion tests/integration/defaultRouter.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Express = require('express')
const Express = require('../../ExpressApp')
const supertestSession = require('supertest-session')
const fafApp = require('../../fafApp')

Expand Down
2 changes: 1 addition & 1 deletion tests/integration/leaderboardRouter.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Express = require('express')
const Express = require('../../ExpressApp')
const supertestSession = require('supertest-session')
const fafApp = require('../../fafApp')
const passportMock = require('../helpers/PassportMock')
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/markdownRouter.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Express = require('express')
const Express = require('../../ExpressApp')
const supertestSession = require('supertest-session')
const fafApp = require('../../fafApp')

Expand Down
2 changes: 1 addition & 1 deletion tests/integration/servicesMiddleware.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const Express = require('express')
const Express = require('../../ExpressApp')
const WordpressService = require('../../lib/WordpressService')
const UserService = require('../../lib/LoggedInUserService')
const LeaderboardService = require('../../lib/LeaderboardService')
Expand Down
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3220,6 +3220,11 @@ expect@^29.7.0:
jest-message-util "^29.7.0"
jest-util "^29.7.0"

express-async-errors@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/express-async-errors/-/express-async-errors-3.1.1.tgz#6053236d61d21ddef4892d6bd1d736889fc9da41"
integrity sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==

express-session@^1.17.3:
version "1.17.3"
resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.3.tgz#14b997a15ed43e5949cb1d073725675dd2777f36"
Expand Down

0 comments on commit 1b76c3e

Please sign in to comment.