ExpressJs
A predefinição de servidor de API usando ExpressJs já vem com algumas configurações para facilitar o desenvolvimento. Veja abaixo o que você precisa saber para utilizar:
É necessário conhecer o framework ExpressJs para utilizar da melhor forma, leia a documentação: https://expressjs.com/
Iniciar o servidor
O arquivo que contém o código para iniciar o servidor fica localizado em src/server/index.ts
. O servidor só será iniciado depois que o bot estiver pronto! Então um evento ready
do bot é usado para iniciar o servidor, confira:
import { createEvent, logger } from "#base";
import { env } from "#env";
import express from "express";
import cors from "cors";
import ck from "chalk";
import { registerRoutes } from "./routes/index.js";
const app = express();
app.use(express.json(), cors());
createEvent({
name: "Start Express Server",
event: "ready", once: true,
async run(client) {
registerRoutes(app, client);
const port = env.SERVER_PORT ?? 3000;
app.listen(port, "0.0.0.0", () => {
logger.log(ck.green(`● ${ck.underline("Express")} server listening on port ${port}`));
});
},
});
Dessa forma basta importar este arquivo em src/index.ts
que o evento será registrado:
import { bootstrap } from "#base";
import "#server";
await bootstrapApp({ meta: import.meta });
Então o servidor express irá iniciar logo após o bot ficar online, assim tendo Client<true>
(instância de Client quando já está online) para poder ser usado nas rotas.
Variáveis de ambiente
O schema zod para validar o env é alterado para permitir novas variávies de ambiente
import { validateEnv } from "#base";
import { z } from "zod";
export const env = validateEnv(z.object({
BOT_TOKEN: z.string("Discord Bot Token is required").min(1),
WEBHOOK_LOGS_URL: z.url().optional(),
SERVER_PORT: z.coerce.number().optional(),
}));
Isso significa que você pode alterar a porta do servidor express usando essa variável no arquivo .env
BOT_TOKEN=yourtoken
SERVER_PORT=8080
Cors
Nesta predefinição, o plugin de cors já vem instalado e com uma configuração básica:
import { createEvent, logger } from "#base";
import { env } from "#env";
import express from "express";
import cors from "cors";
import ck from "chalk";
import { registerRoutes } from "./routes/index.js";
// ...
app.use(express.json(), cors());
// ...
Leia a documentação completa do plugin para entender os melhores casos de uso: https://github.com/expressjs/cors