摘要:是阿里推出的基于的開發(fā)框架,今天抽空體驗了下,按官方教程做一個。用于解析用戶的輸入,處理后返回相應的結果,具體參見。用于編寫業(yè)務邏輯層,可選,建議使用,具體參見。和用于自定義啟動時的初始化工作,可選,具體參見啟動自定義。
egg.js是阿里推出的基于koa的node開發(fā)框架,今天抽空體驗了下,按官方教程做一個Hacker News。其實官方有腳手架提供,但是這次我們不用。
開始之前,我們先看下KOA對于中間件的洋蔥模型,了解這個,對于我們之后理解一個請求的執(zhí)行路徑會很有幫助。
好了,讓我們開始我們的egg之旅吧!
1, 先初始化項目結構:
$ mkdir egg-example $ cd egg-example $ npm init $ npm i egg --save $ npm i egg-bin --save-dev
2, 在package.json里,添加如下命令:
"scripts": { "dev": "egg-bin dev" }
3, 開始編寫代碼,這之前,我們應該對項目的目錄結構有個約定,官方的說明在這里 https://eggjs.org/zh-cn/basic... 我們到時候在回來說下這個目錄。
4 我們需要一個controller,一個router,一個config,內如如下
// app/controller/home.js const Controller = require("egg").Controller; class HomeController extends Controller { async index() { this.ctx.body = "Hello world"; } } module.exports = HomeController; // app/router.js module.exports = app => { const { router, controller } = app; router.get("/", controller.home.index); }; // config/config.default.js exports.keys = <此處改為你自己的 Cookie 安全字符串>;
此時,目錄結構如下:
egg-example ├── app │ ├── controller │ │ └── home.js │ └── router.js ├── config │ └── config.default.js └── package.json
好了,現(xiàn)在檢查下,運行 npm run dev,
在 http://127.0.0.1:7001/ 檢查下,一切ok
這里有幾個地方要注意下
Controller 有class和exports兩個寫法,那么這兩個寫法有什么區(qū)別呢?
按照類的方式編寫Controller,不僅可以讓我們更好的對 Controller層代碼進行抽象(例如將一些統(tǒng)一的處理抽象成一些私有方法),還可以通過自定義Controller 基類的方式封裝應用中常用的方法。至于方法的方式,官方不推薦使用,只是為了做兼容,其中,每一個 Controller 都是一個 async function,它的入?yún)檎埱蟮纳舷挛?Context 對象的實例,通過它我們可以拿到框架封裝好的各種便捷屬性和方法
config也有module.exports 和 exports兩種寫法,那么這兩種寫法有什么區(qū)別呢?
module.exports是Module系統(tǒng)創(chuàng)建對象的語法,但是如果你希望你的 module是一個類的實例,你可以將實例賦予moduel.exports,如這時候 module.exprots指向的就是一個A的實例了,可以用以下方式調用A的方 法 module.exports.xxx(),等價于 a.xxx()。但是如果只是exports= new ClassA();這個只是簡單的將本模塊變量exports重新綁定了而已。注 意,對module.exports的綁定不能是異步綁定或者回調中! 可以這樣理解,其他模塊使用本模塊時,用的是module.exports指向的東 西,而exports是模塊內部變量,外部模塊是無法訪問的。 module.exports和exports是兩個變量,只是一開始這兩個是指向同一個對 象而已。可以在模塊內部用exports作為module.exports的快捷方式
現(xiàn)在,我們看下官方的目錄結構規(guī)范:
egg-project ├── package.json ├── app.js (可選) ├── agent.js (可選) ├── app | ├── router.js │ ├── controller │ | └── home.js │ ├── service (可選) │ | └── user.js │ ├── middleware (可選) │ | └── 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 用于配置 URL 路由規(guī)則,具體參見 Router。
app/controller/** 用于解析用戶的輸入,處理后返回相應的結果,具體參見 Controller。
app/service/** 用于編寫業(yè)務邏輯層,可選,建議使用,具體參見 Service。
app/middleware/** 用于編寫中間件,可選,具體參見 Middleware。
app/public/** 用于放置靜態(tài)資源,可選,具體參見內置插件 egg-static。
app/extend/** 用于框架的擴展,可選,具體參見框架擴展。
config/config.{env}.js 用于編寫配置文件,具體參見配置。
config/plugin.js 用于配置需要加載的插件,具體參見插件。
test/** 用于單元測試,具體參見單元測試。
app.js 和 agent.js 用于自定義啟動時的初始化工作,可選,具體參見啟動自定義。關于agent.js的作用參見Agent機制。
由內置插件約定的目錄:
app/public/** 用于放置靜態(tài)資源,可選,具體參見內置插件 egg-static。
app/schedule/** 用于定時任務,可選,具體參見定時任務。
若需自定義自己的目錄規(guī)范,參見 Loader API
app/view/** 用于放置模板文件,可選,由模板插件約定,具體參見模板渲染。
app/model/** 用于放置領域模型,可選,由領域類相關插件約定,如 egg-sequelize。
(未完待續(xù))
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/92447.html
摘要:接前一篇,阿里初體驗一我們繼續(xù)我們的之旅。注意到,目錄里和兩個文件夾,這里也是我們編寫業(yè)務邏輯的主要地方。用于解析用戶的輸入,處理后返回相應的結果。在使用導出的模塊時,需要把導出的模塊名改為駝峰標準,且首字母變?yōu)樾憽? 接前一篇,阿里egg.js初體驗(一) 我們繼續(xù)我們的egg之旅。我們已經完成了對于項目結構的搭建,現(xiàn)在我們需要開始業(yè)務的編寫。注意到,目錄里controller和se...
摘要:最近微信小程序異?;鸨?,很多人在學習,下面帶著大家搭建下微信小程序的調試環(huán)境,并調試入門練手項目通訊錄和基礎即可微信推薦使用的語言,去菜鳥教程簡單學習下,,,即可,方便大家學習。 一、前言(坑爹的玩意) 項目源碼:https://github.com/saucxs/wx_... 微信小程序自從2017年,被各種看好,不過一段時間過去了還是反響平平,下半年隨著各項功能的開放,很多企業(yè)...
摘要:因為平常開發(fā)都是前后端分離的模式,就想著使用創(chuàng)建后臺服務,寫一套接口配合其他的項目。復雜數(shù)據(jù)的處理,比如要展現(xiàn)的信息需要從數(shù)據(jù)庫獲取或者是第三方服務的調用。更新用戶信息用戶信息已更改一個簡單的應用結構就是這樣,如此便實現(xiàn)了用負責接口服務。 寫在前面的話 最近在學習Egg.js,它是阿里推出的基于Koa的node開發(fā)框架,為企業(yè)級框架和應用而生。Egg.js 的官方文檔已經很完善了,想學...
閱讀 1049·2021-11-22 09:34
閱讀 2248·2021-11-11 16:54
閱讀 2263·2021-09-27 14:00
閱讀 992·2019-08-30 15:55
閱讀 1582·2019-08-29 12:46
閱讀 659·2019-08-26 18:42
閱讀 773·2019-08-26 13:31
閱讀 3271·2019-08-26 11:52