Como publicar um projeto Fullstack de graça, versão utilizando React, Node.js, JavaScript e Prisma
front-end
e o back-end
separadamente no Githubhttps://vercel.com/
https://console.neon.tech/
Add
e Deploy
vercel-build
, no meu caso estou usando o prisma"main": "mesmo caminho do start",
"scripts": {
"start": "node (o caminho aqui deve ser o mesmo do main),
"vercel-build": "npx prisma migrate deploy && npx prisma generate"
},
vercel.json
- aqui ja vamos configurar o acesso ao node{
"version": 2,
"builds": [
{
"src": "caminho da main",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "(.*)",
"dest": "caminho das rotas ou main"
}
]
}
const app = express();
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', "aqui voce adiciona a URL do seu front-end");
res.header('Access-Control-Allow-Headers', "*");
res.header('Access-Control-Allow-Methods', "GET, POST, PUT, DELETE");
app.use(cors());
next();
});
const port = process.env.PORT || 8000;
app.listen(port, () => {
console.log(`The server is running on port ${port}`);
});
https://app.netlify.com/
public
um arquivo chamado _redirects
com essa linha de código/* /index.html 200
import axios from "axios";
export const urlApi = 'linkdoseubackendaqui';
const Api = axios.create({
baseURL: 'linkdoseubackendaqui',
});
export default Api;
Agora é só acessar o link do front-end que a Netlify forneceu e testar, caso a site tenha adição de imagens infelizmente a Vercel não possui suporte para isso após o build (no back-end),caso tenha interesse seria necessario usar algum serviço cloud como a Aws, todas as imagens usadas até o build (do frond-end) serão carregadas normalmente de forma Statica
https://console.cron-job.org/
app.get('/clear', async (req, res) => {
console.log('Executando a tarefa de limpeza do banco de dados');
try {
await prisma.(tabela do bd).deleteMany();
res.send('Limpeza do banco de dados concluída com sucesso');
} catch (error) {
console.error('Erro ao limpar o banco de dados', error);
res.status(500).send(`Erro ao limpar o banco de dados: ${error.message}`);
}
});