Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ptariche/typescript-koa-mongoose-starter
When Function found Type: A Starter with Koa and Mongoose in Typescript
https://github.com/ptariche/typescript-koa-mongoose-starter
backend joi koa koa2 mongoose nodejs rest-api typescript
Last synced: 2 months ago
JSON representation
When Function found Type: A Starter with Koa and Mongoose in Typescript
- Host: GitHub
- URL: https://github.com/ptariche/typescript-koa-mongoose-starter
- Owner: ptariche
- License: mit
- Created: 2019-05-23T23:50:15.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-03-01T22:40:21.000Z (almost 4 years ago)
- Last Synced: 2024-10-05T03:10:34.327Z (3 months ago)
- Topics: backend, joi, koa, koa2, mongoose, nodejs, rest-api, typescript
- Language: TypeScript
- Homepage:
- Size: 1.38 MB
- Stars: 12
- Watchers: 2
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
# Typescript Koa Mongoose Starter
[![Build Status](https://travis-ci.org/ptariche/typescript-koa-mongoose-starter.svg?branch=master)](https://travis-ci.org/ptariche/typescript-koa-mongoose-starter)
Typescript Koa Mongoose Starter is the beginning of folks who want to play with Typescript in the backend
# Why did I do this?
- I wanted to entertain the idea of possibly running Typescript for our backend at my job
- I haven't touched typescript in 6 years and wanted to see how much it has matured
- I recently played with Deno as I love Rust and ran into several issues# Challenges
- Many libraries for the backend do not have types and some of the @types libraries are out of date
- This increased my development time by a multiple of x3 of what would normally take me to develop
- There wasn't any historical documents or documentation I could find for many of the node modules I normally use# Will I use Typescript in the Future for Node in the backend
- Maybe----
### Prerequisites- Docker (brew cask install docker on mac)
- Mongo (The docker-compose uses Mongo:latest)
- JQ (brew install jq on mac)
- Node 10+### Environment Variables
- Environment variables for local development are found in config.env
- For Docker deployments they are found in deploy.env```
PORT=3000
MONGO_URI=mongodb://127.0.0.1:27017/test
JWT_SECRET=12345678900987654321zxTypeScript
APP_NAME=typescript-node-example
```
### Special Notes
If you wish to change the port in the env variable, make sure to change the ports inside the docker-compose file if you are using the docker-compose commands in the makefile or in package.json### Installation
Install the dependencies and devDependencies and start the server.```sh
$ cd typescript-koa-mongoose-starter
$ npm install
$ npm start
```For production environments.. 0_o
```sh
$ npm install
$ npm run compose-up
```### Generate Documentation
The documentation is outputted in a documentation directory in the root directory.```sh
$ npm run documentation
```### Development
The service runs on port 3000 by default
Want to contribute? Great! Make a Pr!
Open your favorite Terminal and run these commands.
```sh
$ npm run watch
```#### Building for source
To release in javascript. The output is dumped in the dist folder:
```sh
$ npm run build
```---
## Documentation### Error Handling
- If an error occurs that is not taken into account for the error bubbles up to the Koa Error Handleware middleware in the middleware directory, is caught and sent a 500.
- Input validation responds with a 412 if not providated with the proper input
### Swagger
- Swagger routes can be added by utilizing https://github.com/zaaack/koa-joi-swagger although there isn't a type definition file
### Endpoints* Note All Posts require `Content-Type: application/json`
* Note All Authenticated posts require `Authorization Bearer `##### /user - POST
An endpoint that has input and output validation that returns the following information. The password field should be stored in Mongo cryptographically hashed
###### INPUT - JSON
| |Type
|----------------|-------------------------------
|first_name |String
|last_name | String
|email |String
|password |String###### Output - JSON
| |Type
|----------------|-------------------------------
|id | String
|first_name |String
|last_name | String
|email |String#### /login - POST
An endpoint that has input and output validation that returns the following information. This uses JWT Tokens.
###### Input - JSON
| |Type
|----------------|-------------------------------
|email |String
|password | String###### Output - JSON
| |Type
|----------------|-------------------------------
|user_id | String
|token | String#### /user/{user_id} - GET * Authenticated Route
An Authorization Header must be present with `Bearer ` returned from login.
An endpoint that returns the user object., and has output validation. This endpoint requires a valid JWT Token###### Output - JSON
| |Type
|----------------|-------------------------------
|id | String
|first_name |String
|last_name | String
|email |String##### /user/{user_id} - PUT
An Authorization Header must be present with `Bearer ` returned from login.
An endpoint that updates the input of a document and output validation that returns the following information.###### INPUT - JSON
| |Type
|----------------|-------------------------------
|first_name |String
|last_name | String###### Output - JSON
| |Type
|----------------|-------------------------------
|id | String
|first_name |String
|last_name | String
|email |String#### Testing
* Uses Jest, Supertest, Chai and MongoDB Memory Server```sh
npm test
```
#### File Tree Source
```
-- src
|-- .gitignore
|-- .travis.yml
|-- CHANGELOG.md
|-- Dockerfile
|-- LICENSE
|-- README.md
|-- config.env
|-- deploy.env
|-- docker-compose.yml
|-- jest.config.js
|-- makefile
|-- package-lock.json
|-- package.json
|-- tsconfig.json
|-- tslint.json
|-- version.sh
|-- src
| |-- db.ts
| |-- index.ts
| |-- router.ts
| |-- server.ts
| |-- controller
| | |-- blackhole.ts
| | |-- login.ts
| | |-- health.ts
| | |-- user.ts
| |-- lib
| | |-- jwt.ts
| |-- middleware
| | |-- index.ts
| |-- model
| | |-- user.ts
| |-- router
| | |-- blackhole.ts
| | |-- helper.ts
| | |-- login.ts
| | |-- user.ts
| |-- types
| |-- index.ts
|-- test
|-- blackhole.test.ts
|-- login.test.ts
|-- user.test.ts
```Changelog
----
[Link](./CHANGELOG.md)License
----
[MIT](./LICENSE)Author
----
[Peter A. Tariche](https://github.com/ptariche)