node.js 学习 -- koa

简介: 安装 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;    });});


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


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


相关文章
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
69 0
|
25天前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
1月前
|
前端开发 搜索推荐 JavaScript
编程笔记 html5&css&js 001 学习编程从网页开始
编程笔记 html5&css&js 001 学习编程从网页开始
|
2月前
|
前端开发 JavaScript
从零开始学习前端开发:HTML、CSS、JavaScript入门指南
【2月更文挑战第1天】本文将带领读者从零开始学习前端开发,介绍HTML、CSS和JavaScript的基础知识与应用,帮助读者快速入门前端开发领域。
59 1
|
2月前
|
数据采集 机器学习/深度学习 JavaScript
画【Python折线图】的一百个学习报告(二、pyecharts引入js文件)
画【Python折线图】的一百个学习报告(二、pyecharts引入js文件)
43 0
|
2月前
|
开发框架 JavaScript 前端开发
比较两个突出的node.js框架:koa和express
接上文讲述了 koa框架,这边文章比较一下这两个突出的node.js框架:koa和express
|
2月前
|
JSON 前端开发 JavaScript
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
35 0
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
|
2月前
|
资源调度 JavaScript 关系型数据库
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
33 0
|
存储 JavaScript 前端开发