- Na pasta src, crie uma pasta controllers para armazenar os controladores de rotas da API.
- Dentro da pasta controllers, crie o arquivo categoriesController.ts e dentro dele adicione um método para obter todas as categorias do banco de dados:
// src/controllers/categoriesController.ts
import { Request, Response } from 'express'
import { Category } from '../models'
export const categoriesController = {
index: async (req: Request, res: Response) => {
const categories = await Category.findAll()
return res.json(categories)
}
}
- Agora crie um arquivo routes.ts dentro da pasta src, ao lado do server.ts, para conter as rotas da API. Adicione o código abaixo:
// src/routes.ts
import express from 'express'
import { categoriesController } from './controllers/categoriesController'
const router = express.Router()
router.get('/categories', categoriesController.index)
export { router }
- E inclua as rotas na aplicação através do arquivo de entrada server.ts:
// src/server.ts
import express from 'express'
import { database } from './database'
import { router } from './routes'
import { adminJs, adminJsRouter } from './config/adminjs'
const app = express()
app.use(express.static('public'))
app.use(router)
app.use(adminJs.options.rootPath, adminJsRouter)
const PORT = process.env.port || 3000
app.listen(PORT, async () => {
await database.authenticate().then(() => {
console.log('DB connection successfull.')
})
console.log(`Server started successfuly at port ${PORT}.`)
})
- Teste a aplicação através do Postman (ou outro software similar) com uma requisição GET na rota /categories e veja que as categorias são retornadas.
- Por padrão as categorias virão ordenadas por última edição, então se você editou alguma deve ter percebido que a coluna position está fora de ordem. Além disso, não precisamos dos campos created_at e updated_at. Podemos resolver isso modificando o controlador da seguinte forma:
// src/controllers/categoriesController.ts
// ...
index: async (req: Request, res: Response) => {
const categories = await Category.findAll({
attributes: ['id', 'name', 'position'],
order: [['position', 'ASC']]
})
return res.json(categories)
}
// ...
- Também podemos prevenir que erros impeçam o funcionamento da rota utilizando um bloco trycatch para, mesmo que de forma extremamente básica, tratar esses erros e não deixar que eles travem a aplicação:
// src/controllers/categoriesController.ts
// ...
index: async (req: Request, res: Response) => {
try {
const categories = await Category.findAll({
attributes: ['id', 'name', 'position'],
order: [['position', 'ASC']]
})
return res.json(categories)
} catch (err) {
if (err instanceof Error) {
return res.status(400).json({ message: err.message })
}
}
}
// ...
- Utilizaremos este bloco trycatch simples em todos os nossos métodos de controladores a partir de agora para agilizar. Com ele você deve ser capaz de receber uma mensagem na resposta que dá algum direcionamento sempre que ocorrer algum problema.