评论

收藏

[JavaScript] Node.js从入门到放弃(十)

开发技术 开发技术 发布于:2021-07-08 18:51 | 阅读数:523 | 评论:0

  
Node.js从入门到放弃(十)
  前言安装运行脚手架目录结构静态资源开放模板引擎路由服务扩展中间件
前言
  这是该系列文章的最后一篇,主要介绍egg框架的基本使用
安装
npm i egg-init -gegg-init egg-demo --type=simplecd egg-demonpm i
运行
npm run dev
脚手架目录结构
DSC0000.png
  访问首页

DSC0001.png 静态资源开放
  脚手架生成的目录结构中,public路径本身没有被开放,访问时public还是要写上的,如127.0.0.1:7001/public/xxx
模板引擎
安装:npm i egg-view-ejs 
  配置
//app_root/config/plugin.jsexports.ejs = {  enable: true,  package: 'egg-view-ejs',};
//{app_root}/config/config.default.jsconfig.view = {  mapping: {    '.html': 'ejs',  },};
  使用
DSC0002.png DSC0003.png

  效果图

DSC0004.png 路由
  egg 基于koa2封装,在方法调用上采用async ,await 形式,路由上采用内置路由
  demo
'use strict';const Controller = require('egg').Controller;class HomeController extends Controller {//注意:这里方法名index,与接下来使用的路由相关  async index() {    const { ctx } = this;    ctx.body = 'hi, egg';  }}module.exports = HomeController;
'use strict';module.exports = app => {  const { router, controller } = app;  //注意:这里controller.home.index中的index,对应控制器中的index方法  router.get('/', controller.home.index);};
  this与ctx

  •   egg 中的上下文是基于koa封装的,不能直接用ctx.body,而是:this.ctx.body,
  •   习惯使然,可以把ctx从this单独解构出来  const { ctx } = this
  get参数获取(this.ctx.query)
  get动态路由

DSC0005.png 服务
  egg 对目录结构有严格限制,service文件夹用于放置相关服务。除了控制器调用服务外,服务之间也可以相互调用,方式与前者一致。
  新建服务
DSC0006.png

  使用服务
DSC0007.png

  渲染
DSC0008.png

  效果图

DSC0009.png 扩展
  egg 除了本身的一些内置功能外,还支持扩展功能。定义方式很简单,app目录下新建extend文件夹,支持的类型有5个,application,context,helper,request,response,文件名必须严格为这五种类型的名字
  使用helper 对时间格式进行扩展
DSC00010.png

  使用
this.ctx.helper.format(new Date())
  效果图
2019-8-22 2:53:02 PM
中间件
  使用流程:

  •   app目录下新建middleware文件夹
  •   middleware文件夹下新建forbiddenIp.js
  •   书写封禁方法
module.exports = options => {    return async (ctx, next) => {        if (options.ip === '127.0.0.1') {            ctx.status = 403;            ctx.body = "您的IP已经被封禁";        } else {            await next();        }    }}
  除了可以写匿名函数,也可以写命名函数
module.exports = options => {    const forbiddenIpMiddleware = async (ctx, next) => {        if (options.ip === '127.0.0.1') {            ctx.status = 403;            ctx.body = "您的IP已经被封禁";        } else {            await next();        }    }    return forbiddenIpMiddleware;}
  在config.default.js中配置
 config.middleware = ['forbiddenIp'];//forbiddenIp必须和中间件的文件名相同,而不是和方法名相同  config.forbiddenIp={    ip:"127.0.0.1"  }
  效果图
DSC00011.png DSC00012.png


  
关注下面的标签,发现更多相似文章