# 定义目录基本结构

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>

具体模板使用参照官方文档: 关于模板引擎