ssr-api.js 1.52 KB
const api = global.yoho.API;
const service = global.yoho.ServiceAPI;
const logger = global.yoho.logger;
const checkParams = require('../../utils/check-params');
const apiMaps = require('../../config/api-map');

module.exports = () => {
    return async (req, res, next) => {
        const apiInfo = apiMaps[req.path];

        if (!apiInfo) {
            return next();
        }
        let baseParams;

        if (!apiInfo.service) {
            baseParams = {
                uid: req.yoho.uid || void 0,
                method: apiInfo.api
            };
        }

        try {
            const reqParams = Object.assign({}, req.query, req.body, baseParams);
            const params = checkParams.getParams(reqParams, apiInfo);
            const cache = req.method.toLowerCase() !== 'get' ? false : apiInfo.cache;

            let result;

            if (apiInfo.service) {
                result = await service.get(apiInfo.api, params, {
                    cache: cache,
                    code: 200
                });
            } else {
                result = await api[req.method.toLowerCase()]('', params, {
                    code: 200,
                    cache: cache
                });
            }
            if (result) {
                return res.json(result);
            }
            return res.json({
                code: 400
            });
        } catch (e) {
            logger.error(e);
            return res.json({
                code: 400,
                message: e
            });
        }
    };
};