У меня есть некоторый код переднего плана, который будет делать запрос GET к URL "/ api / classes". После запуска мой ExpressJs сервер загрузит мою базу данных SQLite3, затем прочитает запрос и, наконец, сохранит результат внутри объекта и вернет его. Я использую метод db.each () для l oop моей базы данных. Я знаю, что мой l oop работает из-за строк шаблона console.log. Проблема в том, что когда я использую PostMan, я вижу, что res.send () вызывается немедленно, что возвращает пустой объект. Как сделать так, чтобы res.send () вызывался после db.each ()? Я знаю, что db.each () принимает обратный вызов, поэтому я попытался поместить res.send () в качестве аргумента, но это не сработало.
Вот мой код:
const express = require('express');
let sqlite3 = require('sqlite3').verbose();
const app = express();
app.get('/api/classes', (req, res) => {
let classes = {}
let db = new sqlite3.Database('./classes.db', (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the classes database.');
});
let sql = `SELECT CRS_CDE course_code,
CRS_TITLE course_name,
Column3 start_time,
Column4 end_time
FROM spring_schedule
WHERE CRS_TITLE IN `;
let classNames = ['Spanish I', 'Accounting II', 'College Algebra']
let where = '(?' + ',?'.repeat(classNames.length-1) + ')';
sql += where;
db.each(sql, [...classNames], (err, row) => {
if (err) throw err;
console.log(`${row.course_code} + ${row.course_name} + ${row.start_time} - ${row.end_time}`);
classes[row.course_code] = row.course_name
});
db.close();
res.send(classes)
});
const port = 5000;
app.listen(port, () => console.log(`Server started on port ${port}`));