Better way to format Express response
- You can use response with readable name like
res.formatter.ok
for 200 ok orres.formatter.badRequest
for 400 bad request. - It will format your response in two ways
success
anderror
.- If response is
2xx, 3xx
return response under object keydata
. - If response is
4xx, 5xx
return response under object keyerror
.
- If response is
- You can pass metadata as second parameter and it's will present under
meta
object key.
npm install express-response-formatter --save
Response for 200 Ok.
import app from 'express'
import { responseEnhancer } from 'express-response-formatter'
const app = express()
// Add formatter functions to "res" object via "responseEnhancer()"
app.use(responseEnhancer())
app.get('/success', (req, res) => {
const users = [{ name: 'Dana Kennedy' }, { name: 'Warren Young' }]
// It's enhance "res" with "formatter" which contain formatter functions
res.formatter.ok(users)
})
app.listen(3000, () => console.log('Start at http://localhost:3000'))
Result
HTTP/1.1 200 Ok
{
"data": [
{
"name": "Dana Kennedy"
},
{
"name": "Warren Young"
}
]
}
Response for 200 Ok with meta field
app.get('/success-with-meta', (req, res) => {
const users = [{ name: 'Dana Kennedy' }, { name: 'Warren Young' }]
const meta = {
total: 2,
limit: 10,
offset: 0,
}
res.formatter.ok(users, meta)
})
HTTP/1.1 200 Ok
{
"meta": {
"total": 2,
"limit": 10,
"offset": 0,
},
"data": [
{
"name": "Dana Kennedy"
},
{
"name": "Warren Young"
}
]
}
Response for 400 Bad Request with "error"
app.get('/bad-request', (req, res) => {
const errors = [
{ detail: 'Field id is required.' },
{ detail: 'Field foo is required.' },
]
res.formatter.badRequest(errors)
})
HTTP/1.1 400 Bad Request
{
"error": [
{
"detail": "Field id is required."
},
{
"detail": "Field foo is required."
}
]
}
METHOD | STATUS CODE |
---|---|
res.formatter.ok(data, meta?) | 200 |
res.formatter.created(data, meta?) | 201 |
res.formatter.accepted(data, meta?) | 202 |
res.formatter.noContent(data, meta?) | 204 |
res.formatter.badRequest(errors, meta) | 400 |
res.formatter.unauthorized(errors, meta) | 401 |
res.formatter.forbidden(errors, meta) | 403 |
res.formatter.notFound(errors, meta) | 404 |
res.formatter.methodNotAllowed(errors, meta) | 405 |
res.formatter.timeout(errors, meta) | 408 |
res.formatter.conflict(errors, meta) | 409 |
res.formatter.unprocess(errors, meta) | 422 |
res.formatter.tooManyRequests(errors, meta) | 429 |
res.formatter.serverError(errors, meta) | 500 |
res.formatter.badGateway(errors, meta) | 502 |
res.formatter.serviceUnavailable(errors, meta) | 503 |
res.formatter.gatewayTimeout(errors, meta) | 504 |