业余时间学了一下egg.js,并开发了个非常简单的博客,实现了 CRUD 功能,总结一下

安装

$ npm i egg-init -g
$ egg-init eblog --type=simple
$ cd eblog
$ yarn install

路由

官方文档上说的很清楚了

参考:https://eggjs.org/zh-cn/basics/router.html

controller里取值方法

请求数据有三种: query, params, body

query取值方式:const id = this.ctx.request.query.id 适用于:/post?id=1

params 取值方式:const id = this.ctx.params.id 适用于:/post/1

body 取值方式 const id = this.ctx.request.body.id 适用于form表单提交

输出

开发网站有时候要输出渲染后的模板,有时候要输出json数据

输出模板 this.ctx.render('index.nunjucks', {posts: posts});

输出json this.ctx.body = {code: 200, desc: 'success', detail: null}

cookie和session

官方文档说的也很清楚,https://eggjs.org/zh-cn/core/cookie-and-session.html

说一下页面上怎么取session里的数据,我用的是nunjucks,取值方法:

拦截器

官方文档上也叫中间件,我习惯叫拦截器,当用户想编辑自己的博客的时候,会用到这个功能,跟在express里的用法差不多,下面来说一下

app 文件夹下建一个 middleware 文件夹,新建一个文件并加上下面内容

'use strict';

module.exports = () => {

  /*
   * 需要登录
   */
  return async (ctx, next) => {
    if (!ctx.session.user) {
      return ctx.render('login.nunjucks');
    }
    await next();
  };
};

然后在 router.js 里通过下面方法来取这个中间件

const { controller, middleware } = app;
const userRequired = middleware.userRequired();

router.get('/admin/index', userRequired, controller.admin.index);

参考

原文链接: https://chenyongze.github.io/2018/04/20/eblog-egg/