При первом вызове res.render переменная allMusique еще не установлена, так как она не ожидала завершения доступа к базе данных, со второй попытки она уже записана из-за первого доступа.
Я рекомендую вызывать res.render внутри Mongoclient.connect
router.get('/', function(req, res, next) {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("projet_node");
dbo.collection("musiques").find({}).toArray(function(err, result) {
if (err) throw err;
allMusique = result;
var size = allMusique.length-1;
idMaxMusique = parseInt(result[size].id)+1;
res.render('musiques', { resultat: allMusique, idMax: idMaxMusique });
});
});
});
, если вы действительно хотите сохранить структуру, вы можете сделать res.render в функции обратного вызова
function getAllMusique(callbackFunction){
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("projet_node");
dbo.collection("musiques").find({}).toArray(function(err, result) {
if (err) throw err;
allMusique = result;
var size = allMusique.length-1;
idMaxMusique = parseInt(result[size].id)+1;
callbackFunction();
});
});
}
getAllMusique(()=>res.render('musiques', { resultat: allMusique, idMax: idMaxMusique }));
илизаставить функцию возвращать обещание, когда значение уже записано
function getAllMusique(){
return new Promise((resolve, reject) => {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("projet_node");
dbo.collection("musiques").find({}).toArray(function(err, result) {
if (err) throw err;
allMusique = result;
var size = allMusique.length-1;
idMaxMusique = parseInt(result[size].id)+1;
resolve();
});
});
});
}
getAllMusique().then(()=>res.render('musiques', { resultat: allMusique, idMax: idMaxMusique }));