node.js 学习 -- koa

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 安装 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月前
|
JavaScript
ES6学习(9)js中的new实现
ES6学习(9)js中的new实现
|
7天前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
8天前
|
JavaScript 前端开发 API
紧跟月影大佬的步伐,一起来学习如何写好JS(上)
该文章跟随月影老师的指导,探讨了编写优质JavaScript代码的三大原则:各司其职、组件封装与过程抽象,通过具体示例讲解了如何在实际开发中应用这些原则以提高代码质量和可维护性。
紧跟月影大佬的步伐,一起来学习如何写好JS(上)
|
11天前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(8)拓扑元素(Element)_网元(Element)、节点(Node)
本文介绍了Twaver HTML5中的拓扑元素(Element),包括网元(Element)、节点(Node)和连线(Link)的基本概念和使用方法。文章详细解释了Element的属性和方法,并通过示例代码展示了如何在React组件中创建节点、设置节点属性和样式。
22 1
Twaver-HTML5基础学习(8)拓扑元素(Element)_网元(Element)、节点(Node)
|
6天前
|
JavaScript 前端开发 Oracle
软件工程师,学习下JavaScript ES6新特性吧
软件工程师,学习下JavaScript ES6新特性吧
26 9
|
8天前
|
JavaScript 前端开发 算法
紧跟月影大佬的步伐,一起来学习如何写好JS(下)
该文章延续了上篇的内容,进一步探讨了编写优秀JavaScript代码的实践,强调了代码风格一致性、性能优化、团队约定的重要性,并通过实际案例分析了如何在不同场景下写出合适的代码。
|
2月前
|
JSON 前端开发 JavaScript
|
23天前
|
存储 JSON JavaScript
学习node.js十三,文件的上传于下载
学习node.js十三,文件的上传于下载
|
2月前
|
JavaScript 前端开发 iOS开发
学习强大的JavaScript一行代码,能够节省你的时间和代码量
这段内容介绍了25个实用的JavaScript一行代码技巧,涵盖复制内容到剪贴板、打乱数组、颜色值转换、计算平均值、检查数字奇偶性、数组去重、对象为空检测、字符串反转、日期计算、首字母大写、生成随机字符串、四舍五入、清除Cookie、检测暗黑模式等,帮助开发者提高效率并简化代码。
26 2
|
2月前
|
JavaScript 前端开发 小程序
基于js开发快速学习鸿蒙基础
【8月更文挑战第26天】
39 1