Constitui um dos arquivos em que a rotas URL são definidas, ao invés de serem chamadas no arquivo central, como o server.js.
No caso a definição padrão, no arquivo routes.js, é:
export const routes = [
{
method: 'GET',
path: '/users',
handler: (req, res) => {
const users = database.select('users')
return res.end(JSON.stringify(users))
}
},
{
method: 'POST',
path: '/users',
handler: (req, res) => {
const { name, email } = req.body
const user = {
id: randomUUID(),
name,
email
}
database.insert('users', user)
return res.writeHead(201).end()
}
},
{
method: '//get, post, etc...'
path: '//caminho onde a rota se realiza'
handler: //função que a rota executará
}
]
Já no arquivo server.js, é preciso manter um código de verificação e execução das rotas definidas, como:
import { routes } from './routes.js'
const route = routes.find(route => {
return route.method == method && route.path == url
})
if (route) {
return route.handler(req, res)
}
Basicamente, a rota se dá pelo mesmo jeito que se constrói as primeiras, porém com o diferencial de que é preciso ter em mente que para se apagar algo de um DB, por exemplo, é necessário saber qual ITEM será deletado, e daí, surgem os parâmetros dinâmicos, como: (/users/:id), no caso o :id é o parâmetro dinâmico.
Criação de uma funcionalidade REGEX:
// -> /users/:id
export function buildRoutePath(path) {
const routeParametersRegex = /:([a-zA-Z]+)/g
const pathWithParams = path.replaceAll(routeParametersRegex, '(?<$1>[a-z0-9\\-_]+)')
const pathRegex = new RegExp(`^${pathWithParams}`)
return pathRegex
}