md-action.js 1.83 KB
/**
 * 处理接口api的action路由
 */
/* global global */
/* global process */
"use strict";

const _ = require('lodash'),
    path = require('path'),
    express = require('express'),
    router = express.Router(),
    config = global.config,
    fs = require('fs-extra')
;

/**
 * markdown文件查看
 * @param alias_name 路由别名
 * @param md_path markdown文档路径
 * @return {*}
 * @constructor
 */
function MdAction (alias_name, md_path) {
    let alias;

    switch (!!alias_name) {
        case false: // 没有定义别名,默认为根
            alias = '';
            break;
        case /\/.+/.test(alias_name): // 带根路径别名,直接用
            alias = alias_name;
            break;
        case /[^\/].+/.test(alias_name): // 不带根路径别名,补充根路径
            alias = '/' + alias_name;
            break;
        default: // 只传入根路径,和别名空一样处理
            alias = ''

    }

    let doc_path = path.resolve(process.cwd(), md_path || '');

    const MD_REGEXP = new RegExp(`^${alias}\\/([\\/\\w]*)`);

    //根据别名处理文档目录所在的markdown文件
    const viewer = new (require('./view-markdown'))(doc_path, config.md);
    router.get(/(.*)/, function request (req, res, next) {
        let url = req.url, urls = url.match(MD_REGEXP) || [], query = req.query;
        if (!urls.length) {
            return next();
        }
        let ext = path.parse(url).ext;
        if (ext && ext !== '.md') {
            return next();
        }

        let resource_base = req.original_uri.base || '/';
        let html = viewer.render(urls[1], query.t, resource_base);
        res.send(html)

    });
    //加载文档目录为静态页,别名为空时指向根路径
    router.use(alias || '/', express.static(doc_path));

    return router;
}

module.exports = MdAction;