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

来源:https://www.cnblogs.com/kbnet/archive/2018/12/13/10114932.html
-Advertisement-
Play Games

一、路由進階Egg路由的路由重定向,路由分組 在router.js修改為如下格式require引用 新建 routers文件夾,分別建admin.js index.js api.js放置不同內容,寫法和原來的路由文件寫法一致。 路由重定向 在Controller中使用 在routers文件中使用 二 ...


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

router.js修改為如下格式require引用

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放置不同內容,寫法和原來的路由文件寫法一致。

路由重定向

在Controller中使用

this.ctx.status = 301;

This.ctx.redirect()

 

在routers文件中使用

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

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

方法1

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

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

router第二個參數中引用。

中間鍵的通用配置

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)
}

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

新建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使用公共內容 } }

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

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;

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、關於選擇器的命名 W3C CSS2.1的 4.1.3 節中提到:標識符(包括選擇器中的元素名,類和ID)只能包含字元[a- zA-Z0-9]和ISO 10646字元編碼U+00A1及以上,再加連字型大小(-)和下劃線(_);它們不能以 數字,或一個連字型大小後跟數字為開頭。它們還可以包含轉義字元加任何I ...
  • 今天工作中使用了這個,感覺很好用啊! 首先: 這個ReactDom是幹嘛用的? 答: react-dom 包提供了 DOM 特定的方法,可以在你的應用程式的頂層使用,如果你需要的話,也可以作為 React模型 之外的特殊操作DOM的介面。 但大多數組件應該不需要使用這個模塊。 其次: 如何引用? 答 ...
  • 首先我們先來林格斯雙擊翻譯一下: split 劈開, 使分裂; splice 接合; 使結合; slice 切成薄片, 切; 我先是這麼區分的:這三個方法最後一個字母是t的是字元串方法,是e的則是數組方法(當然字元串也有slice方法)。 split 是將字元串用符號分割。返回數組。 參數一:指定字 ...
  • 本文主要介紹了vue-router相關基礎知識及單頁面應用的工作原理,寫的十分的全面細緻,具有一定的參考價值,對此有需要的朋友可以參考學習下。如有不足之處,歡迎批評指正。 單頁面工作原理是通過瀏覽器URL的#後面的hash變化就會引起頁面變化的特性來把頁面分成不同的小模塊,然後通過修改hash來讓頁 ...
  • 移動端的項目經常會引入手勢庫來實現拖拽 不過如果只是一兩個頁面用到拖拽,再引入一個手勢庫就很不划算 最近的項目中就有這麼一個需求: 因為就這一個地方需要拖拽,所以我就沒有引入第三方庫 移動端的拖拽有兩種主流的實現方案: 1. 將元素設置為固定定位,然後在拖拽的時候修改其定位,實現拖拽的效果; 這種 ...
  • Carousel 走馬燈源碼分析整理筆記,這篇寫的不詳細,後面有空補充 main.vue item.vue ...
  • 這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【什麼是jsp?jsp的內置對象有哪些?】 1、背景介紹 百度百科是這麼介紹jsp的:“jsp是一種動態網頁技術標準 ...
  • 這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【瀏覽器如何渲染頁面?】 一、背景介紹瀏覽器是前端工程師或頁面重構師工作中必不可少的,WEB頁面運行在各種各樣的瀏覽 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...