Criando uma api REST com Koa & mongoDB - Parte 1
Tags: api, javascript, node, koajs
Published: 2019-09-27 18:12:19

Koa é uma framework de desenvolvimento web projetada pela equipe por trás do tão conhecido Express, que visa ser robusta para aplicações web. Nesta série de artigos, vamos criar uma api REST utilizando a stack já mencionada no título e por fim escrever um teste básico com jest. Vamos partir da premissa de que você já tenha sólidos conhecimentos de javascript/node/backend no geral. Sem mais delongas, vamos ao que interessa. 

### Preparando o ambiente

Caso você não tenha feito download do node na sua máquina, pode faze-lo [aqui](https://nodejs.org/en/download/).

Feito isso, crie uma pasta, onde ficará o nosso projeto e acesse-a com o terminal. 

<code>tip: No windows, você pode digitar **cmd** na barra de endereço do gerenciador de arquivos.</code>

Agora sim, podemos execultar o nosso _npm init --y_ . Se tudo aconteceu como esperado, na pasta a qual estamos trabalhando foi gerado automaticamente um arquivo por nome de _package.json_. Nele, temos as informações crucias para o nosso projeto, bem como nome, versão, quais dependências estamos utilizando e etc. 

E então, vamos instalar o koa com o seguinte comando: _npm i koa_.

Utilizaremos o Babel, caso você não saiba do que se trata, recomendo dar uma olhada na documentação [neste link](https://babeljs.io/docs/en/).

Perfeito!!!

Abra o diretório que estamos trabalhando no seu editor de código predileto. 

<code>tip: se você usa o Visual Studio Code, é só dar um _'code .'_ no terminal e já é.</code>

para que o babel funcione, crie um arquivo _.babelrc_ com o seguinte conteúdo: 

```json
{
    "presets": ["env"]
}
```

e agora adicione _"babel": "babel-node index.js"_ nos scripts do seu _package.json_, que completo deve ficar assim: 

```json
{
  "name": "koa-api",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "babel": "babel-node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "koa": "^2.8.1"
  },
  "devDependencies": {
    "babel-cli": "^6.16.0",
    "babel-preset-latest": "^6.16.0"
  }
}

```

### O tão esperado hello world

Crie o arquivo index.js e vamos começar importando o framework e inicializando a app:


```javascript
import Koa from 'koa';
const app = new Koa();

```
defina a porta para o server:

```javascript

const port = 3000;

```
e pra finalizar:

```javascript
app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(port);

```
E pronto, nosso hello world já esta funcionado, basta ir no terminal, digitar _npm run babel_ e abrir o navegador no endereço : _localhost:3000_ (caso você queira rodar em uma outra porta, é só alterar a variável _port_).

Agora vamos criar nossa primeira rota e é agora que o _koa-router_ entra em ação. Para obtê-lo, use o comando _npm i koa-router_.

E então, vamos importá-lo no _index.js_ :

```javascript
import Router from 'koa-router';
const router = Router();

```

e agora, substitua a parte do hello world por:

```javascript
router.get('/', (ctx, next) => {
 ctx.body = 'Hello World from homepage!';
});

app.use(router.routes());
app.use(router.allowedMethods());

```

e pronto, nossa primeira rota já esta pronta, basta executar o server pra conferir.


Na próxima parte desta série, vamos começar a trabalhar com o banco de dados e criar as rotas definitivas da nossa api. Enquanto isso, deixarei aqui links de conteúdos que podem ser complementares:

[Koa docs](https://koajs.com/)
[exemplo de api com koa, mongo, babel e jest](https://github.com/srfnd/koa-api)
[entendendo async e await](https://showmethecode.com.br/async-await/)
[ES6 no nodejs](https://blog.tecsinapse.com.br/utilizando-es6-no-node-js-com-babel-js-430346d68794)
[mongoose docs](https://mongoosejs.com/docs/api.html)