Egg.js(以下简称Egg)
Express 是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项目。但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法。Egg 按照约定进行开发,奉行『约定优于配置』,团队协作成本低。
Sails 是和 Egg 一样奉行『约定优于配置』的框架,扩展性也非常好。但是相比 Egg,Sails 支持 Blueprint REST API、WaterLine 这样可扩展的 ORM、前端集成、WebSocket 等,但这些功能都是由 Sails 提供的。而 Egg 不直接提供功能,只是集成各种功能插件,比如实现 egg-blueprint,egg-waterline 等这样的插件,再使用 sails-egg 框架整合这些插件就可以替代 Sails 了。
Egg的特性
提供基于 Egg 定制上层框架的能力
高度可扩展的插件机制
内置多进程管理
基于Koa开发,性能优异
框架稳定,测试覆盖率高
渐进式开发
MongoDB(4.2)
MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
面向集合存储,易存储对象类型的数据。
mongodb集群参考
模式自由。
支持动态查询。
支持完全索引,包含内部对象。
支持查询。
支持复制和故障恢复。
使用高效的二进制数据存储,包括大型对象(如视频等)。
自动处理碎片,以支持云计算层次的扩展性。
支持 Golang,RUBY,PYTHON,JAVA,C++,PHP,C#, NODE等多种语言。
文件存储格式为BSON(一种JSON的扩展)。
可通过网络访问。
Node.js 的MongoDB ORM
uni-apptree new bee
环境需求Nodejs 建议选择 LTS 版本,最低要求 8.x
MongoDB 建议使用4.2版本
Redis 最新版本
nodejs 的安装请查看对应的官方文档
Egg 安装
$ mkdir egg-example && cd egg-example
$ npm init egg --type=simple
$ npm i
```
```JavaScript
$ npm run dev
$ open http://localhost:7001
MongoDB
提供linux RedHat(CentOS)安装示例:
CentOS 去掉sudo
创建 /etc/yum.repos.d/mongodb-org-4.2.repo
文件内容为:
安装基础
sudo yum install -y mongodb-org
安装控制
sudo yum install -y mongodb-org-4.2.10 mongodb-org-server-4.2.10 mongodb-org-shell-4.2.10 mongodb-org-mongos-4.2.10 mongodb-org-tools-4.2.10
启动
sudo systemctl start mongod
安装项目所需插件
1.egg-jwt 标准TOKEN生成校验
2.egg-mongoose MongoDB Nodejs ORM
3.egg-cors插件 跨域插件
4.egg-validate 数据校验插件
4.lodash JS函数库
5.momentjs JS时间处理函数库
6.request http处理包(貌似已弃用)
7.request-promise-native request promise化包(也可用nodejs自带)
8.stream-to-array,stream-wormhole egg上传内存销毁相关包
附package.json
"devDependencies": {
"autod": "^3.0.1",
"autod-egg": "^1.1.0",
"await-stream-ready": "^1.0.1",
"egg-bin": "^4.11.0",
"egg-ci": "^1.11.0",
"egg-cors": "^2.2.3",
"egg-jwt": "^3.1.7",
"egg-mock": "^3.21.0",
"egg-mongoose": "^3.3.0",
"egg-validate": "^2.0.2",
"eslint": "^5.13.0",
"eslint-config-egg": "^7.1.0",
"lodash": "^4.17.20",
"moment": "^2.28.0",
"request": "^2.88.2",
"request-promise-native": "^1.0.9",
"stream-to-array": "^2.3.0",
"stream-wormhole": "^1.1.0"
},
egg 插件配置文件 /config/plugin.js
'use strict';
/** @type Egg.EggPlugin */
exports.validate = {
enable: true,
package: 'egg-validate',
};
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
exports.jwt = {
enable: true,
package: "egg-jwt"
};
exports.cors = {
enable: true,
package: 'egg-cors',
};
exports.redis = {
enable: true,
package: 'egg-redis',
};
egg 配置文件 /config/
/* eslint valid-jsdoc: "off" */
'use strict';
/**
* @param {Egg.EggAppInfo} appInfo app info
*/
module.exports = appInfo => {
/**
* built-in config
* @type {Egg.EggAppConfig}
**/
const config = exports = {};
// use for cookie sign key, should change to your own and keep security
config.keys = appInfo.name + '_1600096669632_8743';
config.middleware = ['fm', 'errorHandler', 'responseFormatter', 'jwtErrorHandler'];
// csrf 设置
config.security = {
csrf: {
enable: false,
ignoreJSON: true
},
domainWhiteList: ['http://localhost', 'http://127.0.0.1', '*']
};
// 跨域
config.cors = {
origin: '*',
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
credentials: true,
};
// 小程序配置
config.wxmpCf = {
appid: '您的小程序APPID',
secret: '您的小程序密钥'
};
// 项目可能回连接多个/多种数据库 这里我们默认只使用mp的MongoDB数据库
config.mongoose = {
clients: {
basic: {
url: 'mongodb://127.0.0.1:27017/您的数据库名称',
options: {},
},
mp: {
url: 'mongodb://127.0.0.1:27017/您的数据库名称2',
options: {},
}
},
};
// 代理获取真实IP
config.proxy = true;
// 地图接口设置
config.wmap = {
amap: { key: '高德地图key' },
txmap: { key: '腾讯地图key' }
};
// add your user config here
const userConfig = {
// myAppName: 'egg',
};
return {
...config,
...userConfig,
};
};
项目目录结构
- app 项目主目录
- controller 控制目录
- extend 扩展
- libs 第三方代码
- middlewear 中间件
- model 数据库模型
- public 静态文件
- router 路由(路由太多的情况使用)
- rules 数据校验文件
- schedule 定时任务
- service 服务
- view 页面模板
router.js 路由文件
- config
- config.default.js 项目配置文件
- plugin egg插件
app.js
agent.js