1
resposta

Como configurar corretamente o projeto para fazer deploy da API no site da Vercel ?

Estou tentando ativar os end points da API pelo Vercel, o deploy é bem sucedido, mas por enquanto não funcionaram todos os pontos, apenas quando faço pela rota '/'.

Sei que é preciso criar o arquivo vercel.json na pasta raíz do projeto, a configuração que sempre tenho encontrado ao pesquisar funciona quando as rotas são especificadas com o app.route("...").get(), mas não encontrei ainda um exemplo com elas definidas utilizando o express.Router(); como acontece aqui.

vercel.json

1 resposta

Olá, Eduardo! Entendo que você está enfrentando problemas para configurar corretamente o deploy da sua API no Vercel. Vamos tentar resolver isso juntos.

Acredito que o problema possa estar na forma como você está direcionando as rotas no seu arquivo vercel.json. Quando você usa o express.Router(), as rotas são tratadas de maneira um pouco diferente.

Vamos supor que você tenha um arquivo routes.js onde você define suas rotas como:

const express = require('express');
const router = express.Router();

router.get('/rota1', function(req, res) {
  res.send('Rota 1');
});

router.get('/rota2', function(req, res) {
  res.send('Rota 2');
});

module.exports = router;

E no seu arquivo server.js (ou app.js), você está usando este router:

const express = require('express');
const app = express();
const routes = require('./routes');

app.use('/', routes);

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

Nesse caso, você deve configurar o vercel.json da seguinte maneira:

{
  "version": 2,
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/server.js"
    }
  ]
}

Isso porque, quando você usa o express.Router(), todas as rotas são relativas ao ponto onde o router é usado. Então, no exemplo acima, as rotas /rota1 e /rota2 são na verdade /rota1 e /rota2 relativas à /, que é onde o router é usado.

Espero ter ajudado e bons estudos!