紧接上文, 配置好mongodb环境后, 我们就要开始创建Egg.js项目了
附注: 此次是windows环境项目, node.js版本8.x以上, 也不怎么讲原理, 主要是先上手
首先附上Egg.js文档目录: https://www.eggjs.org/zh-CN/intro/quickstart
- 安装Egg.js, 新创建一个文件夹, 这里的为
egg-demo
, 执行命令
npm init egg --type=simple
这里采用的是egg.js官方提供的simple
的模板
然后就可以看到项目文件:
然后执行
npm install
命令, 安装相关依赖包, 然后可以使用npm run dev
启动项目, 启动之后, 会默认生成一个http://127.0.0.1:7001
的路径地址, 文件介绍如下:运行项目后, 在浏览器地址栏输入
http://127.0.0.1:7001
, 就可以看到页面由于电脑还有其他egg.js项目启动, 所以我的是
http://127.0.0.1:7002
-
下面我们开始第一步: 了解路由
具体的相关介绍大家可以移步官网, 我这里就不一一介绍水字数了, 首先我们可以直接点开router.js
文件
里面是帮我们配好了自带的home.js
的路由, 文件路径在app/controller/home.js
我们在浏览器页面显示的hi egg
就是这个文件显示的,ctx.body = 'hi, egg';
为了了解相关, 我们在app/controller/
目录下创建一个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
, 如图:
然后介绍一下
get
请求的传参, 一般分为两种,第一种为:
http://127.0.0.1:7001/product?id=100&name=张三
第二种为:
http;//127.0.0.1:7001/product/123
看图就知道, 第一种为
query
的方式, 第二种为params
方式, 在路由定义在页面可以看到:
当然, 这里打印的是对象, 如果要取值的话,
ctx.query.id
, ctx.query.name
, 关于第二种的话就是ctx.params.id
-
router的其他请求
经常用的其实也就是get
,post
,put
,delete
我们说的增删改查
先在config/config.default.js
增加如下配置, 后面需要用到postman
工具
然后在controller/product.js处, 添加我们的增删改查接口
然后在路由表添加如下请求
router.get("/product", controller.product.index); // 列表数据
router.post("/product/create", controller.product.create); // 新增接口
router.put("/product/update/:id", controller.product.update); // 修改接口
router.delete("/product/delete/:id", controller.product.delete); // 删除接口
路由处添加完后, 回到我们的product.js处, 找到create接口, 在里面接收
然后打开postman软件, 模拟请求我们的新增接口
可以看到, 是请求成功的, 接下来我们看修改请求和删除请求, 这两个请求有点类似, 所以放一起说了
在controller/product.js处的update和delete方法处, 写好代码, 然后到postman处, 尝试去请求, 是否可以拿到ID
可以看到, 都是OK的, 可以拿到相对应的参数
下面我们来说一下它的service服务
-
Service服务
具体详情, 可看官方文档, https://www.eggjs.org/zh-CN/basics/service, 我们在这里就不多写了, 具体逻辑, 校验啥的往里丢就行了
然后我们在app文件夹下, 新建一个service的文件, 里面再创建一个product.js的文件, 然后模拟一个列表返回请求, 因为我们现在还没到连接数据库阶段, 所以先进行模拟
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()
方法中稍做修改
然后再到浏览器
可以看到, 是返回成功的
那我们在路径为
app/controller/home.js
里面是否可以使用到service/product.js
里的内容呢?我们一起来试一试
"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;
可以看到, 这样也是OK的, 到了这里, 我们了解egg基础的到这里就结束了, 基于现在都是前后端分离的模式, 后面还会出一节使用egg.js+mongodb+vue3的前后端分离文章
ejs模板引擎
到了这里, 也说一个egg.js的模板引擎, 也就是egg.js官网中的模板渲染: https://www.eggjs.org/zh-CN/core/view, 但我们在这里说的是ejs的一个模板, 全称egg-view-ejs
相对来说比较成熟, 给大家放个链接https://www.npmjs.com/package/egg-view-ejs
先进行安装
npm install egg-view-ejs --save
, 安装完毕后, 在路径为config/plugin.js
里面, 复制上面的配置然后在路径为
config/config.default.js
文件上, 继续配置配置完后, 我们在
app
文件夹下, 新建一个名为view
的文件夹, 然后在view
的文件夹下, 新建一个index.html
的文件然后到路径为
app/controller/home.js
文件下, 使用ctx.render()
进行渲染, 第一个值为路径, 第二个值为要传进去的变量然后回到index.html, 把传进来的变量, 添加进去, ejs使用变量, 有一个特定的格式, 为
<%=变量%>
然后我们在浏览器输入127.0.0.1:7001
可以看到, 这是OK的, 那我们怎么在里面渲染列表呢?我们来试一试, 在home.js里面写一个list数组
然后在index.html页面上, 写一个
ul
列表, 使用for循环, 感觉和PHP的是不是差不多然后我们去浏览器页面, 可以看到, 是渲染出来的
如何使用静态资源呢, 也是一样的, egg.js的静态资源是统一放在public文件夹的, 下面我们在public文件夹进行下演示, 创建
css, image, js
三个文件夹, 然后在index.html中引入好了, 这次的就说到这里了, 如果有对ejs感兴趣的, 可以移步https://ejs.bootcss.com/ 官网看看
如果本次的分享对你有用, 请动动你的小手点个赞哦