緊接上文, 配置好mongodb環(huán)境后, 我們就要開始創(chuàng)建Egg.js項目了
附注: 此次是windows環(huán)境項目, node.js版本8.x以上, 也不怎么講原理, 主要是先上手
首先附上Egg.js文檔目錄: https://www.eggjs.org/zh-CN/intro/quickstart
- 安裝Egg.js, 新創(chuàng)建一個文件夾, 這里的為
egg-demo
, 執(zhí)行命令
npm init egg --type=simple
這里采用的是egg.js官方提供的simple
的模板
然后就可以看到項目文件:
image.png
然后執(zhí)行
npm install
命令, 安裝相關(guān)依賴包, 然后可以使用npm run dev
啟動項目, 啟動之后, 會默認生成一個http://127.0.0.1:7001
的路徑地址, 文件介紹如下:image.png
運行項目后, 在瀏覽器地址欄輸入
http://127.0.0.1:7001
, 就可以看到頁面image.png
由于電腦還有其他egg.js項目啟動, 所以我的是
http://127.0.0.1:7002
-
下面我們開始第一步: 了解路由
具體的相關(guān)介紹大家可以移步官網(wǎng), 我這里就不一一介紹水字數(shù)了, 首先我們可以直接點開router.js
文件
image.png
里面是幫我們配好了自帶的home.js
的路由, 文件路徑在app/controller/home.js
image.png
我們在瀏覽器頁面顯示的hi egg
就是這個文件顯示的,ctx.body = 'hi, egg';
為了了解相關(guān), 我們在app/controller/
目錄下創(chuàng)建一個product.js
的文件
const Controller = require("egg").Controller; // 引入Controller組件
class ProductController extends Controller { // 需使用駝峰命名法
async index() {
const { ctx } = this;
ctx.body = "hello, product!";
}
}
module.exports = ProductController;
然后到router.js
文件聲明, 為get
請求
module.exports = app => {
const { router, controller} = app;
router.get('/', controller.home.index);
router.get("/product", controller.product.index);
}
然后在頁面路徑改為http://127.0.0.1:7001/procuct
, 如圖:
image.png
然后介紹一下
get
請求的傳參, 一般分為兩種,第一種為:
http://127.0.0.1:7001/product?id=100&name=張三
第二種為:
http;//127.0.0.1:7001/product/123
image.png
看圖就知道, 第一種為
query
的方式, 第二種為params
方式, 在路由定義image.png
在頁面可以看到:
image.png
image.png
當然, 這里打印的是對象, 如果要取值的話,
ctx.query.id
, ctx.query.name
, 關(guān)于第二種的話就是ctx.params.id
-
router的其他請求
經(jīng)常用的其實也就是get
,post
,put
,delete
我們說的增刪改查
image.png
先在config/config.default.js
增加如下配置, 后面需要用到postman
工具
然后在controller/product.js處, 添加我們的增刪改查接口
image.png
然后在路由表添加如下請求
router.get("/product", controller.product.index); // 列表數(shù)據(jù)
router.post("/product/create", controller.product.create); // 新增接口
router.put("/product/update/:id", controller.product.update); // 修改接口
router.delete("/product/delete/:id", controller.product.delete); // 刪除接口
image.png
路由處添加完后, 回到我們的product.js處, 找到create接口, 在里面接收
image.png
然后打開postman軟件, 模擬請求我們的新增接口
image.png
image.png
可以看到, 是請求成功的, 接下來我們看修改請求和刪除請求, 這兩個請求有點類似, 所以放一起說了
image.png
在controller/product.js處的update和delete方法處, 寫好代碼, 然后到postman處, 嘗試去請求, 是否可以拿到ID
image.png
image.png
image.png
可以看到, 都是OK的, 可以拿到相對應的參數(shù)
下面我們來說一下它的service服務(wù)
-
Service服務(wù)
具體詳情, 可看官方文檔, https://www.eggjs.org/zh-CN/basics/service, 我們在這里就不多寫了, 具體邏輯, 校驗啥的往里丟就行了
image.png
然后我們在app文件夾下, 新建一個service的文件, 里面再創(chuàng)建一個product.js的文件, 然后模擬一個列表返回請求, 因為我們現(xiàn)在還沒到連接數(shù)據(jù)庫階段, 所以先進行模擬
const Service = require("egg").Service;
class ProductService extends Service {
async index() {
return {
id: 100,
name: "西瓜",
weight: 100
}
}
}
module.exports = ProductService;
然后我們回到路徑為app/controller/product.js
文件, 在index()
方法中稍做修改
image.png
然后再到瀏覽器
image.png
可以看到, 是返回成功的
那我們在路徑為
app/controller/home.js
里面是否可以使用到service/product.js
里的內(nèi)容呢?我們一起來試一試
"use strict"
const Controller = require("egg").Controller;
class HomeController extends Controller {
async index() {
const { ctx } = this;
const res = await ctx.service.product.index();
ctx.body = res;
// ctx.body = "hi, egg";
}
}
module.exports = HomeController;
image.png
可以看到, 這樣也是OK的, 到了這里, 我們了解egg基礎(chǔ)的到這里就結(jié)束了, 基于現(xiàn)在都是前后端分離的模式, 后面還會出一節(jié)使用egg.js+mongodb+vue3的前后端分離文章
ejs模板引擎
到了這里, 也說一個egg.js的模板引擎, 也就是egg.js官網(wǎng)中的模板渲染: https://www.eggjs.org/zh-CN/core/view, 但我們在這里說的是ejs的一個模板, 全稱egg-view-ejs
相對來說比較成熟, 給大家放個鏈接https://www.npmjs.com/package/egg-view-ejs
image.png
image.png
先進行安裝
npm install egg-view-ejs --save
, 安裝完畢后, 在路徑為config/plugin.js
里面, 復制上面的配置image.png
然后在路徑為
config/config.default.js
文件上, 繼續(xù)配置image.png
配置完后, 我們在
app
文件夾下, 新建一個名為view
的文件夾, 然后在view
的文件夾下, 新建一個index.html
的文件image.png
然后到路徑為
app/controller/home.js
文件下, 使用ctx.render()
進行渲染, 第一個值為路徑, 第二個值為要傳進去的變量image.png
然后回到index.html, 把傳進來的變量, 添加進去, ejs使用變量, 有一個特定的格式, 為
<%=變量%>
image.png
然后我們在瀏覽器輸入127.0.0.1:7001
image.png
可以看到, 這是OK的, 那我們怎么在里面渲染列表呢?我們來試一試, 在home.js里面寫一個list數(shù)組
image.png
然后在index.html頁面上, 寫一個
ul
列表, 使用for循環(huán), 感覺和PHP的是不是差不多image.png
然后我們?nèi)g覽器頁面, 可以看到, 是渲染出來的
image.png
如何使用靜態(tài)資源呢, 也是一樣的, egg.js的靜態(tài)資源是統(tǒng)一放在public文件夾的, 下面我們在public文件夾進行下演示, 創(chuàng)建
css, image, js
三個文件夾, 然后在index.html中引入image.png
image.png
image.png
好了, 這次的就說到這里了, 如果有對ejs感興趣的, 可以移步https://ejs.bootcss.com/ 官網(wǎng)看看
如果本次的分享對你有用, 請動動你的小手點個贊哦