Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/d-fischer/httpanda
A frugal HTTP server for simple tasks.
https://github.com/d-fischer/httpanda
Last synced: 3 months ago
JSON representation
A frugal HTTP server for simple tasks.
- Host: GitHub
- URL: https://github.com/d-fischer/httpanda
- Owner: d-fischer
- License: mit
- Created: 2020-05-29T16:22:19.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-12-10T09:49:22.000Z (about 1 year ago)
- Last Synced: 2024-09-21T13:51:19.399Z (4 months ago)
- Language: TypeScript
- Size: 127 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🐼 HTTPanda - a frugal HTTP server for simple tasks
- Lightweight and fast
- Streamlined feature set, sufficient for most applications
- Supports `express` (and `connect`) compatible middleware
- Both CommonJS and ES module support via [tsukuru](https://www.npmjs.com/package/tsukuru)## Basic usage
```ts
import { Server } from 'httpanda';
import cors from 'cors';const server = new Server();
server.use(cors())
.get('/hello', (req, res) => res.end('Hello World!'))
.get('/users/:id', (req, res) => res.end(`Welcome, user ${req.params.id}!`))
.listen(3000).then(() => console.log('Listening on port 3000')).catch(e => console.error(e));
```## Reference
### `new Server(options?: ServerOptions)`
Creates a new instance of HTTPanda.
All options are *optional*, you can just use `new Server()` to use the default options.
Available options:
#### `server`
Your own HTTP server instance. Can also take a `https.Server` to support SSL.
#### `onError`
An error handler that takes the following arguments:
- `e` - the error object
- `req` - the request object (an instance of the internal `Request` type)
- `res` - the response object (an instance of the internal `Response` type, currently equivalent to `http.ServerResponse`)
- `next` - a function you can call to ignore the error and keep walking the middleware chain#### Example
```ts
const server = new Server({
server: https.createServer({ /* ... certificate stuff ... */ }),
onError: (e, res) => {
console.log(e);
res.statusCode = e.code || 500;
res.end(JSON.stringify(e));
}
})
```### `server.listen(port: number): Promise`
Listens to the given port. The returned `Promise` resolves with the `Server` instance on success, or rejects in case the port is in use or could otherwise not be bound.
Other forms of this as shown in the [node `net` documentation](https://nodejs.org/api/net.html#net_server_listen) are also supported, except the callback is always replaced by the returned `Promise`.
### `server.use(...callbacks: RouteCallback[]): this`
### `server.use(path: string, ...callbacks: RouteCallback[]): this`Chains a set of middlewares on the given path, or on any path if none is given. **Express middlewares are supported!**
### `server.add(method: string | undefined, path: string, ...callbacks: RouteCallback[]): this`
Adds a callback to a specific path. Parameters can be specified on the path with a leading colon and are available on `req.params`:
```ts
server.get('/users/:id', (req, res) => res.end(`Welcome, user ${req.params.id}!`))
```If you pass `undefined` as method, the callback will execute on any method.
### `server.all(path: string, ...callbacks: RouteCallback[]): this`
A shortcut to `server.add(undefined, path, ...callbacks)`.
### `server.get(path: string, ...callbacks: RouteCallback[]): this`
A shortcut to `server.add('GET', path, ...callbacks)`.
Other shortcuts that work the same way:
- `server.head`
- `server.options`
- `server.post`
- `server.put`
- `server.patch`
- `server.delete`
- `server.connect`
- `server.trace`