egg.js-基於koa2的node.js進階(一)

1、路由進階Egg路由的路由重定向,路由分組

router.js修改成以下格式require引用git

module.exports = app => {
const { router, controller } = app;
require('./routers/admin')(app);
require('./routers/index')(app);
require('./routers/api')(app);
};

新建 routers文件夾,分別建admin.js index.js api.js放置不一樣內容,寫法和原來的路由文件寫法一致。github

路由重定向json

在Controller中使用api

this.ctx.status = 301;

This.ctx.redirect()

 

在routers文件中使用app

router.redirect('/new','/',302)

2、Egg中間件指定模塊引用jsonp koa中間件在egg中使用koa

方法1async

const auth = app.middleware.auth() //在單獨模塊中定義
module.exports = app => {
const { router, controller } = app; 
router.get('/admin/user',auth,controller.admin.user.index);
};

在路由的第二個參數填入中間鍵名稱函數

router第二個參數中引用。jsonp

中間鍵的通用配置網站

Enable 是否開啓

Match 設置只有符合條件的使用

Ignore  排除使用中間件的目錄,不能和match同時使用

2.//對後臺管理通用配置
config.adminAuth ={
match: '/admin' //對某個路由配置表示只匹配該路由
}

3.Koa-jsonp使用 https://github.com/kilianc/koa-jsonp

Npm i koa-jsonp

//koa 中的應用
// jsonp = require("koa-jsonp")
// app.use(jsonp())
新建中間件jsonp.JS
module.exports =require("koa-jsonp");  
Config.default.js中配置
config.middleware = ['jsonp'];

koa-compress的使用

創建中間件引用

module.exports =require("koa-compress");
Config.default.js中配置
config.compress = {
threshold: 1024,
enable:false,
match(ctx){
if(ctx.request.url=='/yingu' || ctx.request.url == '/news'){
return true
}
return false;
}
}

非標準寫法

let koaJsonp = require("koa-jsonp");
module.exports = (option,app) => {
return koaJsonp(option)
}

3、控制器控制器繼承的使用

新建core/base.js做爲公共controller

'use strict';
const Controller = require('egg').Controller;
class BaseController extends Controller {
async success(redirectUrl = "/") {
await this.ctx.render('public/success',{url:redirectUrl});
}
async error(redirectUrl) {
await this.ctx.render('public/error',{url:redirectUrl || "/"});
}
}
module.exports = BaseController;

list.js中修改引用的controller

const BaseController = require('../core/base.js');
class ListController extends BaseController {  //繼承BaseController
async index() { await this.success('/news/1') //直接this使用公共內容 } }

4、 定時任務模塊的使用,和實現網站監控功能

app/schedule寫定時任務模塊,新建watchfile.js

const Subscription = require('egg').Subscription;
let i=0;
class WatchFile extends Subscription {
// 經過 schedule 屬性來設置定時任務的執行間隔等配置
static get schedule() {
return {
interval: '5m', // 1 分鐘間隔
type: 'all', // 指定全部的 worker 都須要執行
disable:false  //是否開啓
};
}
// subscribe 是真正定時任務執行時被運行的函數
async subscribe() {
i++
console.log(i)
}
}
module.exports = WatchFile;
相關文章
相關標籤/搜索