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)
    }


Métodos de remoção e edição

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
}