const config = require('./config/common'); const path = require('path'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const yohoLib = require('yoho-node-lib'); const pkg = require('./package.json'); const devtools = require('./doraemon/middleware/devtools'); const _ = require('lodash'); // 全局注册library yohoLib.global(config); // 指定 doraemon, utils 目录 global.utils = path.resolve('./utils'); global.doraemon = path.resolve('./doraemon'); exports.createApp = async(app) => { // 向模板注入变量 app.locals.devEnv = app.get('env') === 'development'; app.locals.proEnv = app.get('env') === 'production'; app.locals.version = pkg.version; if (config.zookeeperServer) { const monitor = global.yoho.monitorSender; const monitorType = _.get(monitor, 'type.ZOOKEEPER'); require('yoho-zookeeper')(config.zookeeperServer, 'wap', app.locals.wap = {}, false, { onerror: (err) => { monitor.tallyFail(monitorType, { code: err.code, message: err.name }); } }); } app.use('/mapp/node/status.html', (req, res) => { res.status(200).end(); }); const logger = global.yoho.logger; if (app.locals.devEnv) { app.use(devtools()); } // 添加请求上下文 app.use(global.yoho.httpCtx()); app.use(global.yoho.hbs({ extname: '.hbs', defaultLayout: 'layout', layoutsDir: path.join(__dirname, 'doraemon/views'), partialsDir: path.join(__dirname, 'doraemon/views/partial'), views: path.join(__dirname, 'doraemon/views'), helpers: _.assign(global.yoho.helpers, require('./utils/helpers')) })); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(cookieParser()); require('./doraemon/middleware/yoho-session')(app); // dispatcher try { const userMiddleware = require('./doraemon/middleware/user'); const setYohoDataMiddleware = require('./doraemon/middleware/set-yoho-data'); const errorMiddleware = require('./doraemon/middleware/error-handler'); const ssrApiMiddleware = require('./doraemon/middleware/ssr-api'); const ssrRouteMiddleware = require('./doraemon/middleware/ssr'); // YOHO 前置中间件 app.use(setYohoDataMiddleware); app.use(userMiddleware); app.use('/mapp', ssrApiMiddleware); app.use(ssrRouteMiddleware.routers); app.all('*', ssrRouteMiddleware.ssrRender); // 404 // YOHO 后置中间件 app.use(errorMiddleware.serverError); // listener app.listen(config.port, function() { logger.info(`worker is started at http://localhost:${config.port}`); }); } catch (err) { logger.error(err); process.exit(1); //eslint-disable-line } };