@occupop/lib-http
v1.0.0
Published
This package is intended to be used with `@occupop/lib-container` being a wrapper for Express, providing factory for server and router object.
Downloads
49
Maintainers
Keywords
Readme
Package @occupop/lib-http
This package is intended to be used with @occupop/lib-container
being a wrapper for Express, providing factory for server and router object.
This implementation refers to https://expressjs.com/en/guide/routing.html! Check their docs for detailed/advanced usage.
NPM registry token required!
Install
# Yarn
yarn add @occupop/lib-http
# NPM
npm install @occupop/lib-http
# Bun
bun add @occupop/lib-http
Env Setup
ENV variables suggested
API_PORT=4000
Register
import {
makeHttpServer, makeHttpRouter
} from '@occupop/lib-http'
//... all other imports omited...
export const container = createTypedContainer({
// ...
// Top-level
httpServer: { asFunction: makeHttpServer, singleton: true },
httpRouter: { asFunction: makeHttpRouter },
// Router with routes registered
appRouter: { asFunction: makeAppRouter, singleton: true },
// ...
})
Usage (register app routes)
// app-router.ts
export function makeAppRouter({
httpRouter,
createUserUseCase,
deleteUserUseCase,
//...
}: Deps) {
return httpRouter
.get('/', (req, res) => {
res.send('hello world')
})
.post('/user', (req, res) => {
const { username, email, password } = req.body
res.json(createUserUseCase({ username, email, password }))
})
.delete('/user/:userUuid', (req, res) => {
const { userUuid } = req.params
res.json(deleteUserUseCase(userUuid))
})
}
Usage (starting server)
// server.ts
import { container } from '.container'
const { mongoClient, httpServer, appRouter } = container.cradle
await mongoClient.connect()
console.log('Mongo connected')
const httpPort = process.env.API_PORT || 4000
httpServer.use(appRouter)
await httpServer.listen(httpPort, () => {
console.log(`Http listening on http://localhost:${httpPort}`)
})
// ...