快递:如何结束回应

时间:2018-06-13 15:12:38

标签: node.js express mysqli

我是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;

问题是,如果发生任何错误,请进入catch区块并继续直到 res.json('完成'); 并发送消息可以'在发送标题后设置标题如何处理类似

的情况

1 个答案:

答案 0 :(得分:0)

尝试使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;