Installer Express et MongoDb en loaders indépendants
Dès que l’on commence un nouveau projet, il est important de bien penser à l’architecture de son projet, mais aussi à avoir du code testable et maintenable, et cela passe aussi par le développement de modules indépendants qui faciliteront tout cela. En NodeJS, lorsqu’on initialise Express et MongoDB par exemple, on a souvent tendant à tout mettre dans un seul fichier type server.js
, auquel on ajouter le démarrage de Redis, MongoDB et tout ce qu’on peut utiliser d’autre. Mais cela complique bien les choses lorsque notre projet grossit et qu’on doit ajouter d’autres configurations à notre Express, d’autres middlewares etc.
Pour palier à cela, nous allons présenter ici la manière dont on peut diviser nos configurations de serveur et les rendre indépendants au démarrage.
Créer un dossier loaders au sein de votre application.
Express.Js
Ceci étant fait, créez un fichier express.js
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cors = require('cors')
async function initExpress() {
app.get('/status', (req, res) => {
res.status(200).end();
});
app.head('/status', (req, res) => {
res.status(200).end();
});
app.enable('trust proxy');
app.use(cors());
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.json())
app.listen(process.env.PORT, process.env.HOSTNAME, function() {
console.log('Your server is ready');
console.log('Server running at http://'+ process.env.HOSTNAME + ':' + process.env.PORT + '/');
});
app.get('/', (req,res) => {
res.send('express connected');
})
// here you can call your route.
return app;
}
module.exports = {
expressInit: function () {
initExpress().then()
},
};
MongoDb avec mongoose
Une fois fait, nous allons initialiser notre base de données MongoDb en utilisant le package Mongoose. Créez donc un fichier mongoose.js
const mongoose = require("mongoose");
async function initMongoose() {
mongoose.Promise = global.Promise;
const db = {};
db.mongoose = mongoose;
db.url = process.env.DATABASE_URL;
module.exports = db;
db.mongoose
.connect(db.url, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log("Connected to the database!");
})
.catch(err => {
console.log("Cannot connect to the database!", err);
process.exit();
});
}
module.exports = {
mongoInit: function () {
initMongoose().then()
},
};
Notre index pour initialiser tout cela
Créer ensuite un fichier index.js
qui va nous permettre d’appeler chaque configuration dont nous avons besoin. Ici donc Express et Mongo.
const expressLoader = require('./express');
const mongooseLoader = require('./mongoose');
require('dotenv').config();
await expressLoader.expressInit();
await mongooseLoader.mongoInit();
Au lancement de votre application express et mongoose vont donc se lancer de manière indépendante dans le code et faciliteront les tests unitaires et la mise en place de catch des erreurs pour chacun d’entre eux ainsi que des actions en cas d’échecs d’initialisation.