| egg-validate POST参数规则校验 https://github.com/eggjs/egg-validate
| egg-mongoose Mongoose https://github.com/eggjs/egg-mongoose

egg-validate

validate只用于post请求的参数校验,get请求取出的都是字符串

$ npm i egg-validate --save

一、在config/plugin.js配置中添加

    exports.validate = {
        enable: true,
        package: 'egg-validate',
    };

二、Exmaple

    async refundApply() {
        const { ctx, app, service } = this;
        const paramRule = {
            partnerUserId: { type: 'string' },
            applyUserName: { type: 'string' },
            amount: { type: 'string' }, 
            sourceAccount: { type: 'string' }, 
        };

        const paramErrors = app.validator.validate(paramRule, ctx.request.body);
        if (paramErrors) {
            ctx.body = app.renderBody({
                statusType: app.statusType.paramsError,
                error: paramErrors,
            });
            return;
        }

        const response = await service.payTool.billquery.refundApply(ctx.request.body);
        ctx.body = response;
    }


三、验证规则  

    1、required - 是否当前字段必须有,required: false 可以为空

    2、allowEmpty - 允许为空

    2、int - 只能为整数

            max - 最大值
            min - 最小值

    3、number - 可以是整数和浮点数

    4、date - 日期 'YYYY-MM-DD'     birthoday: 'date'

    5、dateTime - 日期 YYYY-MM-DD HH:mm:ss

    6、boolean - 是否是布尔值        working: 'boolean'

    7、string - 是否是字符串, 字符串的四个规则:            

        allowEmpty - 允许为空字符串

        format - 使用正则来验证字符串的格式

        max - 字符串最大长度

        min - 字符串最小长度

        const rule = {
            username: { allowEmpty: true, min: 10, max: 100, format: /^\d+$/ }
        }

    8、email - 是否是email格式

    9、password - 密码验证规则 max最大、min最小、compare比较  pass: {type: password, max: 32, min: 6}

    10、url - 是否是url

    11、enum - 如果是枚举需要加一个规则

        // operateType的值必须是values数组中的一项,values必须为数组
        const paramRule = {
            operateType: { type: 'enum', values: ['REPAYMENT', 'CHARGE'] },        
        }
        const paramErrors = app.validator.validate(paramRule, ctx.request.body);

    12、object - 如果是对象,需要加一个规则 

    13、array - 如果是数组,需要加一个规则

        itemType 数组中每一个元素的规则 
        rule - An object that validate the items of the array. Only work with itemType.
        max - 数组最大长度
        min - 数组最小长度

        childrens: {
            type: 'array',
            itemType: 'object',
            required: false,
            rule: {
                name: 'string',
                age: 'int',
                gender: ['male', 'female'],
                birthday: {type: 'date', required: false}
            }
        }


https://github.com/node-modules/parameter
https://github.com/node-modules/parameter/blob/master/benchmark.js
https://github.com/node-modules/parameter/blob/master/example.js

egg-mongoose

$ npm i egg-mongoose --save

$ plugin.js

    exports.mongoose = {
        enable: true,
        package: 'egg-mongoose',
    };

$ config.default.js

    mongoose: {
  url: 'mongodb://127.0.0.1:27017/ibg_node_core',
  options: {},
}

$ 可以多数据库配置

egg-mysql

$ npm i egg-mysql --save

$ plugin.js

    exports.mysql = {
        enable: true,
        package: 'egg-mysql',
    };

$ config.default.js

    mysql: {
        // database configuration
        client: {
            // host
            host: 'mysql.com',
            // port
            port: '3306',
            // username
            user: 'test_user',
            // password
            password: 'test_password',
            // database
            database: 'test',    
        },
        // load into app, default is open
        app: true,
        // load into agent, default is close
        agent: false,
    }

$ app.mysql.query(sql, values)              获取sql

$ 可以多数据库配置

ejs 后端模板

$ npm install ejs

https://segmentfault.com/a/1190000004286562
http://www.360doc.com/content/16/0115/10/597197_528136785.shtml
https://github.com/tj/ejs

渲染模板nunjucks 后端模板

$ npm i egg-view-nunjucks --save

一、tpl文件要放到view目录里

二、配置
// config/plugin.js
exports.nunjucks = {
    enable: true,
    package: 'egg-view-nunjucks'
};

// config/config.default.js
exports.keys = <此处改为你自己的 Cookie 安全字符串>;

// 添加 view 配置
exports.view = {
    defaultViewEngine: 'nunjucks',
    mapping: {
        '.tpl': 'nunjucks',
    },
};

三、Controller
module.exports = app => {
    class NewsController extends app.Controller {
        async newsList(){
            const { ctx } = this;
            const dataList = {
                list: [
                    { id: 1, title: 'this is news 1', url: '/news/1' },
                    { id: 2, title: 'this is news 2', url: '/news/2' }
                ]
            }
            await ctx.render('news/newsList.tpl', dataList);                // 注意这里dataList必须是一个对象
        }
    }

    return NewsController;
}

四、newsList.tpl

<html>
    <head>
        <title>Hacker News</title>
    </head>
    <body>
        <ul class="news-view view">
            {% for item in list %}
					
  • {{ item.title }}
  • {% endfor %} </ul> </body> </html> http://mozilla.github.io/nunjucks/cn/templating.html https://github.com/eggjs/examples/tree/master/hackernews/app/view/news

    其它收集插件

    1、ms返回时间 - https://github.com/zeit/ms       // ms用来返回一个时间  ms('2h') 返回 7200000  
    
    2、MD5加密 - https://github.com/jkiss/crypto-js      npm i crypto-js --save  引用 const MD5 = require('crypto-js/md5');
    
    3、文件上传 - https://github.com/node-modules/formstream
    
    4、JSON串和对象互转 - https://github.com/ljharb/qs  // 可以根据key来进行排序 
    
    5、验证码 - https://github.com/lemonce/svg-captcha/blob/master/README_CN.md
    

    | 参考资料
    | https://github.com/eggjs eggjs官方插件
    |