Экспресс: как закончить ответ - PullRequest
0 голосов
/ 13 июня 2018

Я новичок в Nodejs, столкнулся с некоторыми проблемами и мне нужна помощь

Я разбил свое приложение на модули и контроллеры в app.js

app.use('/api/sync', syncDataRouter)

и в syncDataRouter.js

const routes = function (con, Reading, ReadingSummary) {
    const syncDataRouter = express.Router();

    const syncDataController = require('../controller/syncDataController')(con, Reading, ReadingSummary);

    //Get All Readings from Database and push it to Mongo-db
    syncDataRouter.route('/')
        .get(syncDataController.sync);


    return syncDataRouter;

};

module.exports = routes;

и в контроллере

     const syncDataController = function (con, Reading, ReadingSummary) {


        function getAllCompletedSessions() {
            return new Promise((resolve, reject) => {
                const sql = 'SELECT * FROM session WHERE endTime IS NOT NULL';

                con.query(sql, (err, rows) => {
                    if (err) reject(new Error(err));
                    resolve(rows);
                });
            });
        };


        function getSessionPlayers(sessionId) {
            return new Promise((resolve, reject) => {
                const sql = 'SELECT * FROM sessionplayers WHERE sessionId = ?';

                con.query(sql, [sessionId], (err, rows) => {
                    if (err) reject(new Error(err));
                    resolve(rows);
                });
            });
        };


        const sync = (req, res) => {
            getAllCompletedSessions()
               .then(sessions => {
            })
            .catch(err => {
                res.status(500).send({ message: err.message });
            });

            //The Problem
             res.json('Done');

        };


        return {
            sync: sync
        }

   }

  module.exports = syncDataController;

проблема в том, что если произошла какая-либо ошибка, введите блок перехвата, а также продолжайте до res.json ('Done'); и отправьтесообщение не может установить заголовки после их отправки как справиться с такой ситуацией

1 Ответ

0 голосов
/ 13 июня 2018

Попробуйте сделать sql запросы асинхронными

const syncDataController = function (con, Reading, ReadingSummary) {


        async function getAllCompletedSessions() {
            return new Promise((resolve, reject) => {
                const sql = 'SELECT * FROM session WHERE endTime IS NOT NULL';

                await con.query(sql, (err, rows) => {
                    if (err) reject(new Error(err));
                    resolve(rows);
                });
            });
        };


        async function getSessionPlayers(sessionId) {
            return new Promise((resolve, reject) => {
                const sql = 'SELECT * FROM sessionplayers WHERE sessionId = ?';

                await con.query(sql, [sessionId], (err, rows) => {
                    if (err) reject(new Error(err));
                    resolve(rows);
                });
            });
        };


        const sync = (req, res) => {
            getAllCompletedSessions()
               .then(sessions => {
            })
            .catch(err => {
                res.status(500).send({ message: err.message });
            });

            //The Problem
             res.json('Done');

        };


        return {
            sync: sync
        }

   }

  module.exports = syncDataController;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...