open-index/open-npm huggingface dataset:
npm package: @occupop/lib-http
Description: This package is intended to be used with `@occupop/lib-container` being a wrapper for Express, providing factory for server and router object.
Latest version: 1.0.0

# 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
```bash
# Yarn
yarn add @occupop/lib-http

# NPM
npm install @occupop/lib-http

# Bun
bun add @occupop/lib-http
```

## Env Setup
ENV variables suggested
```dotenv
API_PORT=4000
```

## Register

```typescript
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)
```typescript
// 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)
```typescript
// 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}`)
})
// ...
```