| 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官方插件
|
国内查看评论需要代理~