# 定义目录基本结构
egg-project
├── package.json
├── app.js (可选)
├── agent.js (可选)
├── app
| ├── router.js
│ ├── controller // 编写控制器
│ | └── home.js
│ ├── service (可选) //此处进行数据库操作等
│ | └── user.js
│ ├── middleware (可选) // 自定义中间件或引入koa中间件
│ | └── response_time.js
│ ├── schedule (可选) // 定时任务
│ | └── my_task.js
│ ├── public (可选)
│ | └── reset.css
│ ├── view (可选) // 静态模板文件
│ | └── home.tpl
│ └── extend (可选) // 扩展文件
│ ├── helper.js (可选) //常用扩展,挂在于全局
│ ├── request.js (可选)
│ ├── response.js (可选)
│ ├── context.js (可选)
│ ├── application.js (可选)
│ └── agent.js (可选)
├── config // 全局配置文件
| ├── plugin.js
| ├── config.default.js
│ ├── config.prod.js
| ├── config.test.js (可选)
| ├── config.local.js (可选)
| └── config.unittest.js (可选)
└── test
├── middleware
| └── response_time.test.js
└── controller
└── home.test.js
# 路由传值
通过路由可以获得前端传递的参数值,路由配置文件统一放在 app/router.js文件下. 路由定义方式
module.exports = app => {
const { router, controller } = app;
router.get('/home', controller.home); // 普通get传值
router.get('/user/:id', controller.user.page); // 动态路由传值 前端传值方式:https://www.baidu.com/123
router.post('/admin', isAdmin, controller.admin); // 有中间件的路由传值,isadmin为自定义路由鉴权中间件
router.post('/user', isLoginUser, hasAdminPermission, controller.user.create); //中间件级联操作
router.post('/api/v1/comments', controller.v1.comments.create); // app/controller/v1/comments.js
};
获取路由传值 所有的路由控制代码均放在controller文件夹下 获取GET传值
// 路由形式: https://xxx.xxxx.xxx/?user=xx method:GET
this.ctx.query.user //获取路由参数
动态路由获取传值
//eggjs 路由形式 router.get('/user/:id', controller.user.page);
//前端路由 https://xxx.xxxx.xxx/123
//获取传值
this.ctx.query.id
POST 获取传值
this.ctx.request.body
//直接进行post会报错,需要暂时关闭csrf 模块,或自行添加请求cookie进行csrf验证
关于csrf,点击链接 关于csrf
# 静态文件渲染
引入ejs 模板渲染引擎
npm i egg-view-nunjucks --save
配置ejs插件
//config/plugins.js 启用插件
ejs: {
enable: true,
package: 'egg-view-ejs',
},
//config/config.default.js 配置插件
// 定义模板引擎
config.view = {
mapping: {
'.html': 'ejs',
},
};
定义视图
app/view/index.html
//此处按照常规html语法编写
//渲染完成发送页面
await this.ctx.render('index',list) // 可进行传值操作
<!-- index.html --> 根据传递的list进行页面数据展示
<ul>
<%for(var i=0;i<list.length;i++){%>
<li>
<a href="/newscontent?aid=<%=list[i].aid%>""><%=list[i].title%></a>
<span>
<%=helper.formatTime( list[i].dateline)%>
</span>
</li>
<%}%>
</ul>
具体模板使用参照官方文档: 关于模板引擎