1
0
mirror of https://github.com/tcgdex/cards-database.git synced 2025-04-24 11:52:16 +00:00

feat(server): Add better logging to detect potential errors

Signed-off-by: Avior <f.bouillon@aptatio.com>
This commit is contained in:
Florian Bouillon 2022-12-09 14:42:22 +01:00
parent 33814d7df2
commit 8192542c1d
Signed by: Florian Bouillon
GPG Key ID: E05B3A94178D3A7C
2 changed files with 41 additions and 10 deletions

View File

@ -1,26 +1,44 @@
import express from 'express' import express from 'express'
import { graphqlHTTP } from 'express-graphql' import { graphqlHTTP } from 'express-graphql'
import { buildSchema, formatError } from 'graphql'
import resolver from './resolver'
import fs from 'fs' import fs from 'fs'
import { buildSchema, formatError, GraphQLError } from 'graphql'
import resolver from './resolver'
// Init Express Router // Init Express Router
const router = express.Router() const router = express.Router()
/** /**
* Drawbacks * Drawbacks
* Attack.damage is a string instead of possibly being a number or a string * Attack.damage is a string instead of possibly being a number or a string
*/ */
const schema = buildSchema(fs.readFileSync('./public/v2/graphql.gql').toString()) const schema = buildSchema(fs.readFileSync('./public/v2/graphql.gql').toString())
// Error Logging for debugging
function graphQLErrorHandle(error: GraphQLError) {
if (process.env.NODE_ENV !== 'production') {
console.error(error)
}
if (error.source) {
console.error('GraphQL Error')
console.error(error.message)
console.error(error.source?.body.replace(/\n/g, '\\n'))
}
return formatError(error)
}
// Add graphql to the route // Add graphql to the route
router.use(graphqlHTTP({ router.get('/', graphqlHTTP({
schema, schema,
rootValue: resolver, rootValue: resolver,
graphiql: true, graphiql: true,
customFormatErrorFn(error) { customFormatErrorFn: graphQLErrorHandle
console.error(error) }))
return formatError(error)
} router.post('/', graphqlHTTP({
schema,
rootValue: resolver,
graphiql: true,
customFormatErrorFn: graphQLErrorHandle
})) }))
export default router export default router

View File

@ -1,14 +1,14 @@
import express from 'express' import express from 'express'
import graphql from './V2/graphql'
import jsonEndpoints from './V2/endpoints/jsonEndpoints'
import status from './status' import status from './status'
import jsonEndpoints from './V2/endpoints/jsonEndpoints'
import graphql from './V2/graphql'
// Current API version // Current API version
const VERSION = 2 const VERSION = 2
// Init Express server // Init Express server
const server = express() const server = express()
// Set global headers // Set CORS global headers
server.use((_, res, next) => { server.use((_, res, next) => {
res res
.setHeader('Access-Control-Allow-Origin', '*') .setHeader('Access-Control-Allow-Origin', '*')
@ -18,6 +18,19 @@ server.use((_, res, next) => {
next() next()
}) })
// Route logging / Error logging for debugging
server.use((req, res, next) => {
res.on('close', () => {
console.log(`[${new Date().toISOString()}]: ${req.method.padStart(7, ' ')} ${res.statusCode} ${(req.baseUrl ?? '') + req.url}`)
})
res.on('error', (err) => {
console.error('Error:')
console.error(err)
})
next()
})
server.get('/', (_, res) => { server.get('/', (_, res) => {
res.redirect('https://www.tcgdex.dev/?ref=api.tcgdex.net') res.redirect('https://www.tcgdex.dev/?ref=api.tcgdex.net')
}) })