API Docs for:
Show:

File: ../../src/netease/icp/backend/Main.js

var assert = require('assert');
var logger = using('easynode.framework.Logger').forFile(__filename);
var GenericObject = using('easynode.GenericObject');
var S = require('string');
var thunkify = require('thunkify');
var Routes = using('netease.icp.backend.routes.Routes');
var MySqlDataSource = using('easynode.framework.db.MysqlDataSource');
var HTTPUtil =  using('easynode.framework.util.HTTPUtil');

(function () {
    /**
     * Class Main
     *
     * @class netease.icp.backend.Main
     * @extends easynode.GenericObject
     * @since 0.1.0
     * @author allen.hu
     * */
    class Main extends GenericObject
    {
        /**
         * 构造函数。
         *
         * @method 构造函数
         * @since 0.1.0
         * @author allen.hu
         * */
        constructor()
        {
            super();
            //调用super()后再定义子类成员。
        }

        static * main(){
            //load config
            var configUrl = process.env.CONFIG_URL;
            var config = {};
            config = configUrl.startsWith("http") ? yield HTTPUtil.getJSON(configUrl) : require(configUrl);
            //
            //
            ////Database source, connection pool
            var ds = new MySqlDataSource();
            ds.initialize(config.mysql);

            ////数据库查询
            var conn = yield ds.getConnection();
            var sql = 'SELECT max(id)  as maxCode FROM user';
            var args = {};
            var arr = yield conn.execQuery(sql, args = {});
            console.log(arr);
            yield ds.releaseConnection(conn);


            //HTTP Server
            var KOAHttpServer =  using('easynode.framework.server.http.KOAHttpServer');
            var httpPort = S(EasyNode.config('http.server.port','7000')).toInt();
            var httpServer = new KOAHttpServer(httpPort);

            httpServer.ds = ds;
            httpServer.ds.conn = conn;
            //设置ContextHook,
            httpServer.setActionContextListener({
                onCreate: function (ctx) {
                    console.log("onCreate");
                    return function * () {
                        ctx.setConnection(yield ds.getConnection());
                        yield ctx.getConnection().beginTransaction();
                    };
                },
                onDestroy: function (ctx) {
                    console.log("onDestroy");
                    return function * () {
                        yield ctx.getConnection().commit();
                        yield ds.releaseConnection(ctx.getConnection());
                    };
                },

                onError: function (ctx, err) {
                    console.log("onError");
                    return function * () {
                        yield ctx.getConnection().rollback();
                        !err.executeResult  && logger.error(err.stack);
                    };
                }
            });

            httpServer.config = config;
            httpServer.name = EasyNode.config('http.server.name','icp-Service');
            Routes.defineRoutes(httpServer);

            yield httpServer.start();
        }

        getClassName()
        {
            return EasyNode.namespace(__filename);
        }
    }

    module.exports = Main;
})();