'use strict';

/**
 * 异常处理
 *
 * @author CaiAoLin
 * @date 2017/10/25
 * @version
 */

module.exports = () => {
    return function* errorHandler(next) {
        try {
            yield next;
        } catch (err) {
            // 注意：自定义的错误统一处理函数捕捉到错误后也要 `app.emit('error', err, this)`
            // 框架会统一监听，并打印对应的错误日志
            this.app.emit('error', err, this);
            // mysql重连
            if (err.code === 'PROTOCOL_CONNECTION_LOST') {
                this.app.mysql.createInstance(this.app.config.mysql.client);
            }
        }
    };
};
