Code zentralisieren?
Kann mir jemand helfen meinen Code zu zentralisieren? Ich möchte die DB connection aus dem code raus gezogen wird danke.
const fs = require('node:fs');
const path = require('node:path');
const { Client, Collection, Events, GatewayIntentBits } = require('discord.js');
const { token } = require('./config.json');
const { Sequelize } = require('sequelize');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: ''
});
client.commands = new Collection();
const foldersPath = path.join(__dirname, 'commands');
const commandFolders = fs.readdirSync(foldersPath);
for (const folder of commandFolders) {
const commandsPath = path.join(foldersPath, folder);
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
const filePath = path.join(commandsPath, file);
const command = require(filePath);
if ('data' in command && 'execute' in command) {
client.commands.set(command.data.name, command);
} else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`);
}
}
}
const eventsPath = path.join(__dirname, 'events');
const eventFiles = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js'));
for (const file of eventFiles) {
const filePath = path.join(eventsPath, file);
const event = require(filePath);
if (event.once) {
client.once(event.name, (...args) => event.execute(...args));
} else {
client.on(event.name, (...args) => event.execute(...args));
}
}
(async () => {
try {
await sequelize.authenticate();
console.log('The connection to the database has been successfully established.');
} catch (error) {
console.error('The connection to the database has failed:', error);
} finally {
sequelize.close();
}
})();
client.login(token);
2 Antworten
Ich würd dir einen Command- sowie Eventhandler in eigenen Dateien empfehlen, die du dann einfach nur aufrufen kannst.
Also z.B. `src/utils/eventHandler` und `src/utils/commandHandler` so hast du in deiner index Datei nur ganz wenig drinnen stehen, eigentlich nur den `client.login(token)`
Deine Datenbank Verbindung kannst du dann entweder drinnen lassen oder auch in einer eigenen Datei wohnen lassen. Meine Index Datei hat weniger als fünf Zeilen, da alles in seiner eigenen Datei seinen Platz hat - kann ich nur so weiterempfehlen.
Kurz und knapp: Umgebungsvariablen sind dein Freund.
- Installiere das dotenv Modul
- Erstelle neben deiner index.js eine neue .env Datei
- Speichere darin Umgebungsvariablen
- Binde das dotenv Modul ein
- Verwende deine gesetzten Umgebungsvariablen (z.B. in einer database.js)
.env:
DB_USERNAME=db_user
DB_PASSWORD=db_passwort
DB_DATABASE=db_name
database.js:
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: process.env.DB_DATABASE || ''
});
module.exports = sequelize;
index.js:
require('dotenv').config();
const sequelize = require('./database.js');
Alles weitere ebenfalls in sinnvolle Einzelsegmente ausgelagert wird. Ansonsten hat dir bereits BeamerBen gute Tipps bzgl. der Module in Node gegeben.
ENV (Environment) sind Umgebungsvariablen und bieten eine zusätzliche Sicherheitsebene, um sensible Informationen wie Zugangsdaten, API-Schlüssel oder andere Konfigurationsparameter von deinem Quellcode zu trennen.
.env schützen dich zudem davor, das derlei Daten nicht versehentlich in ein öffentliches Repositorie oder in andere unsichere Umgebungen offengelegt werden. Wärst nicht der erste und nicht der letzte, dem so etwas passiert. ;)
ja genau wollte das so raus holen
und ich hab genau die beiden ordner