Возможно, причина в том, что вызов db является асинхронным c, и, поскольку вы не ожидаете его, он вернет визуализированное представление до того, как данные будут полностью извлечены.
Таким образом, вам нужно дождаться вызов к базе данных. Учитывая, что функция является ожидаемой:
exports.getIndex = async (req, res) => {
...
try {
const result = await sqldb.GetSubscribers();
}
catch(err) {
console.log('Error getting subscribers', err);
}
...
};
В качестве альтернативы, если функция тогда способна:
exports.getIndex = (req, res) => {
return sqldb.GetSubscribers().then(result =>
res.render('subscribtions/index', {
moment: moment,
subs : result,
pageTitle: 'Subscribtions',
path: '/subscribtions'
})
.catch(error => {
console.log(error);
res.redirect(404, '../views/404.ejs');
}));
}
Чтобы функция GetSubscribers
вернула обещание:
exports.GetSubscribers = () => {
const connString = 'ConnectionString';
query = 'Some Long Query';
return new Promise((resolve, reject) => {
sql.open(connString, (err, con) => {
if (err) {
console.log(`failed to open ${err.message}`);
}
con.prepare(query, (err, ps) => {
if (err) {
console.log(`Fejl - prepare: ${err.message}`);
reject();
}
con.query(query, (err, rows) => {
if (err) {
console.log(`Fejl - query: ${err.message}`);
reject(err);
}
console.log('Returning results...');
resolve(rows);
});
});
});
});
};