node.js 学习 -- koa

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 安装 Koa 框架

五、 优化目录结构


1. 将 Http 服务和 app 业务拆分

在 src 目录下创建 app 文件夹,用来处理业务


新增一个 index.js 文件,将 main.js 入口文件中的部分代码移植到这里

// 引包const Koa = require("koa");const app = new Koa();const userRouter = require("../router/user.route");// 配置中间件app.use(userRouter.routes());module.exports = app

改写 main.js 优化了代码

const app = require("./app/index");// 读取env配置const { APP_PORT } = require("./config/config.default");app.listen(APP_PORT, () => {  console.log("Server on 8000");});


2. 将路由和控制器拆分


路由:解析 URL,分发给控制器对应的方法


控制器:处理业务


改写 user.route.js


用来匹配路径

const Router = require("koa-router");// 导入控制器接口const { register ,login} = require("../controller/user.controller");const router = new Router({ prefix: "/users" });// 注册接口router.post("/register", register);// 登录接口router.post("/login",login)module.exports = router;


改写 user.controller.js


将路由的请求处理函数写在这个文件中

class UserController {  async register(ctx, next) {    ctx.body = "注册接口";  }  async login(ctx, next) {    ctx.body = "登录接口";  }}module.exports = new UserController();


通过创建一个类的方式,再返回一个实例化的对象,就可以调用对应的函数了


六、解析 body


1. 安装 koa-body


yarn add koa-body


2. 注册中间件

const Koa = require("koa");// 注册中间件app.use(KoaBody())


3. 解析请求数据


通过 request.body 来获取数据

const { user_name, password } = ctx.request.body;ctx.body = ctx.request.body;


4. 拆分 service 层

专门用来操作数据库


在文件目录下创建一个 service 文件夹,用来存放 service 文件

class UserService {    async createUser(user_name,password) {        return '写入成功'    }}module.exports = new UserService()


换个视频看,这个视频偏向实战,不够系统


koa 学习(二)


B站视频:Node框架koa从入门到实战写接口(2021)



编写一个接口


首先和 express 一样,我们需要建立 app.js 入口文件,routes 管理路由接口,model 创建模型


1. 入口文件


在 app.js 中编写主程序

// app.js// 引入依赖const koa = require("koa");const Router = require("koa-router");const mongoose = require("mongoose");const bodyParser = require("koa-bodyparser");// 实例化const app = new koa();const router = new Router();// 配置post 中间件app.use(bodyParser());// 引入 api 模块const users = require("./routes/api/user");// 配置路由地址router.use("/api/users", users);// 配置路由app.use(router.routes()).use(router.allowedMethods());// 监听端口app.listen(3000, () => {  console.log("3000启动");});


一定要配置中间件,不然会 not Found

app.use(router.routes()).use(router.allowedMethods());

注意:这里的router.use 第一个参数,设置的是路由地址前缀api/users


我们要访问 /test 时,需要访问 /api/users/test


2. 数据模型


在 model 中创建 User.js 文件,用来连接数据库,处理用户数据模型

const UserSchema = new Schema({  name: {    type: String,    required: true,  },  password: {    type: String,    required: true,  },  email: {    type: String,    required: true,  },  avatar: {    type: String,    required: true,  },  data: {    type: Date,    default: Date.now,  },});module.exports = mongoose.model("User", UserSchema);


3. 路由处理


引入 router 挂载路由即可

const Router = require("koa-router");const router = new Router();// 引入 User modelconst User = require("../../models/User");// 路由router.get("/test", async (ctx) => {  ctx.status = 200;  ctx.body = {    msg: "hello",  };});


4. 巨坑点


当我们使用测试工具测试邮箱时,我们填写邮箱时尽量不要打 .com 不然会被解析成对象,导致数据出错



把. 去掉


测试工具采用 postman ,body 选择 x-www-form-unlencoded


数据加密

采用 bcryptjs 来进行数据加密

yarn add bcryptjs


引入

const bcrypt = require("bcryptjs")


使用

await bcrypt.genSalt(10, function (err, salt) {    bcrypt.hash(newUser.password, salt, function (err, hash) {    if (err) {        throw err;    }    newUser.password = hash;    });});


传入我们的密码,然后更改实例对象的数据


存在问题,我们在控制台上打印处理的数据是加密的,但是在数据库中的仍然是明文


相关文章
|
1月前
|
Web App开发 JavaScript 前端开发
如何学习JavaScript?
如何学习JavaScript?
39 5
|
2月前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
84 3
|
1月前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
24 2
|
1月前
|
存储 JavaScript 前端开发
JavaScript学习第一章
本文档介绍了JavaScript的基础知识,包括其在网页中的作用、如何通过JavaScript动态设置HTML元素的CSS属性,以及JavaScript中的变量类型(`var`、`let`、`const`)和数据类型(基本数据类型与引用数据类型)。通过实例代码详细解释了JavaScript的核心概念,适合初学者入门学习。
51 1
|
2月前
|
JavaScript
js学习--制作猜数字
js学习--制作猜数字
42 4
js学习--制作猜数字
|
1月前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
49 4
|
2月前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
52 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
3月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
2月前
|
JavaScript
js学习--制作选项卡
js学习--制作选项卡
38 4
|
2月前
|
JavaScript
js学习--商品列表商品详情
js学习--商品列表商品详情
25 2