{"id":28904792,"url":"https://github.com/glopmts/backend-exemple","last_synced_at":"2026-05-06T04:01:58.484Z","repository":{"id":298330470,"uuid":"999605765","full_name":"glopmts/backend-exemple","owner":"glopmts","description":"This comprehensive guide explains how to host a Node.js backend on Vercel efficiently and hassle-free.","archived":false,"fork":false,"pushed_at":"2025-06-13T21:41:08.000Z","size":1059,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-21T13:02:44.624Z","etag":null,"topics":["backend","javascript","js","node","nodejs","typescript","vercel","vercel-deployment"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/glopmts.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-10T14:02:45.000Z","updated_at":"2025-06-14T02:25:12.000Z","dependencies_parsed_at":"2025-06-10T15:44:11.730Z","dependency_job_id":null,"html_url":"https://github.com/glopmts/backend-exemple","commit_stats":null,"previous_names":["glopmts/backend-exemple"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/glopmts/backend-exemple","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glopmts%2Fbackend-exemple","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glopmts%2Fbackend-exemple/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glopmts%2Fbackend-exemple/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glopmts%2Fbackend-exemple/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/glopmts","download_url":"https://codeload.github.com/glopmts/backend-exemple/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glopmts%2Fbackend-exemple/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32677933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T02:33:58.958Z","status":"ssl_error","status_checked_at":"2026-05-06T02:33:39.611Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","javascript","js","node","nodejs","typescript","vercel","vercel-deployment"],"created_at":"2025-06-21T13:02:23.763Z","updated_at":"2026-05-06T04:01:58.477Z","avatar_url":"https://github.com/glopmts.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Como Hospedar um Backend Node.js na Vercel\n\nEste guia completo explica como hospedar um backend Node.js na Vercel de forma eficiente e sem complicações.\n\n## Índice\n\n- [Pré-requisitos](#pré-requisitos)\n- [Estrutura do Projeto](#estrutura-do-projeto)\n- [Configuração do Vercel](#configuração-do-vercel)\n- [Configuração do package.json](#configuração-do-packagejson)\n- [Funções Serverless vs API Routes](#funções-serverless-vs-api-routes)\n- [Tratamento de Requisições](#tratamento-de-requisições)\n- [Variáveis de Ambiente](#variáveis-de-ambiente)\n- [Implantação na Vercel](#implantação-na-vercel)\n- [Solução de Problemas Comuns](#solução-de-problemas-comuns)\n- [Melhores Práticas](#melhores-práticas)\n\n## Pré-requisitos\n\n- Node.js (versão 14.x ou superior)\n- npm ou yarn\n- Conta na Vercel (gratuita)\n- Git (opcional, mas recomendado)\n\n## Estrutura do Projeto\n\nUma estrutura organizada facilita a manutenção e escalabilidade do seu backend:\n\n```\nmeu-backend-node/\n├── api/                  # Diretório para funções serverless\n│   └── index.js          # Ponto de entrada principal da API\n├── src/                  # Código fonte da aplicação\n│   ├── controllers/      # Controladores da aplicação\n│   ├── models/           # Modelos de dados\n│   ├── routes/           # Definições de rotas\n│   ├── services/         # Serviços da aplicação\n│   └── utils/            # Funções utilitárias\n├── dist/                 # Código compilado (para TypeScript)\n│   └── index.js          # Arquivo de saída compilado\n├── package.json          # Dependências e scripts\n├── vercel.json           # Configuração da Vercel\n└── README.md             # Documentação\n```\n\n## Configuração do Vercel\n\nO arquivo `vercel.json` é essencial para configurar como sua aplicação será implantada:\n\n```json\n{\n  \"version\": 2,\n  \"builds\": [\n    {\n      \"src\": \"dist/index.js\",\n      \"use\": \"@vercel/node\"\n    }\n  ],\n  \"routes\": [\n    {\n      \"src\": \"/static/(.*)\",\n      \"dest\": \"/public/$1\"\n    },\n    {\n      \"src\": \"/(.*)\",\n      \"dest\": \"/dist/index.js\"\n    }\n  ],\n  \"build\": {\n    \"env\": {\n      \"PRISMA_GENERATE\": \"true\"\n    }\n  }\n}\n```\n\n### Explicação das configurações:\n\n- **version**: Versão da configuração da Vercel\n- **builds**: Define como construir sua aplicação\n  - **src**: Caminho para o arquivo principal da aplicação\n  - **use**: Runtime a ser utilizado (no caso, Node.js)\n- **routes**: Define como as requisições serão roteadas\n  - **src**: Padrão de URL a ser correspondido\n  - **dest**: Para onde a requisição será direcionada\n\n## Configuração do package.json\n\nSeu `package.json` deve incluir scripts para desenvolvimento e build:\n\n```json\n{\n  \"name\": \"backend-exemple\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"dev\": \"nodemon src/index.js\",\n    \"clean\": \"rmdir /s /q dist || echo.\",\n    \"prebuild\": \"npm run clean\",\n    \"build\": \"mkdir dist \u0026\u0026 xcopy /E /I src dist\\\\ \u0026\u0026 copy package.json dist\\\\\"\n  },\n  \"keywords\": [],\n  \"author\": \"glopmts\",\n  \"license\": \"ISC\",\n  \"type\": \"commonjs\",\n  \"dependencies\": {\n    \"cors\": \"^2.8.5\",\n    \"dotenv\": \"^16.5.0\",\n    \"express\": \"^5.1.0\"\n  },\n  \"devDependencies\": {\n    \"mkdirp\": \"^3.0.1\",\n    \"nodemon\": \"^3.1.10\"\n  }\n}\n```\n\nPara projetos TypeScript, adicione:\n\n```json\n{\n  \"scripts\": {\n    \"build\": \"tsc\",\n    \"dev\": \"ts-node-dev --respawn src/index.ts\"\n  },\n  \"devDependencies\": {\n    \"typescript\": \"^5.0.4\",\n    \"ts-node-dev\": \"^2.0.0\",\n    \"@types/express\": \"^4.17.17\"\n  }\n}\n```\n\n## Funções Serverless vs API Routes\n\nA Vercel oferece duas abordagens principais:\n\n### 1. Funções Serverless\n\nColoque seus arquivos na pasta `/api` para que sejam tratados como funções serverless:\n\n```javascript\n// api/hello.js\nexport default function handler(req, res) {\n  res.status(200).json({ message: \"Olá do serverless!\" });\n}\n```\n\n### 2. Express com um único ponto de entrada\n\n```javascript\n// src/index.js\nconst express = require(\"express\");\nconst app = express();\n\napp.use(express.json());\n\napp.get(\"/api/hello\", (req, res) =\u003e {\n  res.json({ message: \"Olá do Express!\" });\n});\n\n// Importante: Exporte o app para uso com serverless\nmodule.exports = app;\n\n// Para desenvolvimento local\nif (process.env.NODE_ENV !== \"production\") {\n  const PORT = process.env.PORT || 3000;\n  app.listen(PORT, () =\u003e {\n    console.log(`Servidor rodando na porta ${PORT}`);\n  });\n}\n```\n\n## Tratamento de Requisições\n\nA Vercel adiciona propriedades auxiliares ao objeto de requisição para facilitar o tratamento:\n\n```javascript\nexport default async function handler(req, res) {\n  // Acesso direto ao corpo da requisição\n  const { body } = req;\n\n  // Resposta\n  res.status(200).json({\n    message: `Olá ${body.name}, você acabou de analisar o corpo da requisição!`,\n  });\n}\n```\n\n## Variáveis de Ambiente\n\nPara configurar variáveis de ambiente:\n\n1. No painel da Vercel: Projeto \u003e Settings \u003e Environment Variables\n2. Localmente: Crie um arquivo `.env.local` (não comite este arquivo)\n\nPara acessar:\n\n```javascript\n// Acesso à variável de ambiente\nconst apiKey = process.env.API_KEY;\n```\n\n## Implantação na Vercel\n\n### Método 1: CLI da Vercel\n\n```bash\n# Instale a CLI da Vercel\nnpm i -g vercel\n\n# Faça login\nvercel login\n\n# Implante\nvercel\n```\n\n### Método 2: GitHub Integration\n\n1. Faça push do seu código para um repositório GitHub\n2. Acesse o dashboard da Vercel\n3. Clique em \"New Project\"\n4. Selecione o repositório\n5. Configure as opções de build\n6. Clique em \"Deploy\"\n\n## Solução de Problemas Comuns\n\n### Erro 404 ou 500\n\nSe você encontrar erros 404 ou 500:\n\n1. **Verifique o arquivo de saída**: Certifique-se de que o caminho no `vercel.json` corresponde ao arquivo de saída real.\n\n2. **Crie um arquivo de entrada separado**: Se você tem apenas um `app.js`, crie um arquivo `index.js` ou `server.js` que importe e exporte seu app:\n\n```javascript\n// server.js\nconst app = require(\"./app\");\nmodule.exports = app;\n```\n\n3. **Regenere o build após mudanças**: A Vercel não regenera automaticamente o build. Execute `npm run build` antes de cada deploy.\n\n### CORS\n\nPara habilitar CORS:\n\n```javascript\napp.use((req, res, next) =\u003e {\n  res.header(\"Access-Control-Allow-Origin\", \"*\");\n  res.header(\n    \"Access-Control-Allow-Headers\",\n    \"Origin, X-Requested-With, Content-Type, Accept, Authorization\"\n  );\n  if (req.method === \"OPTIONS\") {\n    res.header(\"Access-Control-Allow-Methods\", \"PUT, POST, PATCH, DELETE, GET\");\n    return res.status(200).json({});\n  }\n  next();\n});\n```\n\n## Melhores Práticas\n\n1. **Use primitivos da Vercel**: Aproveite os recursos nativos da plataforma\n\n2. **Organize funções serverless**: Divida sua API em funções menores para melhor performance\n\n3. **Otimize o cold start**: Minimize dependências e use técnicas de lazy loading\n\n4. **Monitore o desempenho**: Use o painel da Vercel para monitorar o desempenho\n\n5. **Implemente cache**: Use cabeçalhos de cache para conteúdo estático\n\n6. **Utilize o sistema de build**: Configure corretamente o `vercel.json` para otimizar o processo de build\n\n7. **Teste localmente**: Use `vercel dev` para testar seu ambiente localmente antes de implantar\n\n---\n\nCom este guia, você deve ser capaz de hospedar com sucesso seu backend Node.js na Vercel. Se encontrar problemas, consulte a [documentação oficial da Vercel](https://vercel.com/docs) ou abra uma issue neste repositório.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglopmts%2Fbackend-exemple","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglopmts%2Fbackend-exemple","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglopmts%2Fbackend-exemple/lists"}