【Node.js实战】一文带你开发博客项目之初识Koa2(koa2安装使用、搭建开发环境、测试路由)

简介: 【Node.js实战】一文带你开发博客项目之初识Koa2(koa2安装使用、搭建开发环境、测试路由)

一、前言

前面,我们已经完成了 原生node.js 和 Express 框架 的 myblog 项目。


对比:express 中间件是异步回调,koa2 原生支持 async/await。


接下来,我们使用 koa2 继续重构我们的 myblog 项目!


二、介绍 Koa2

1、async / await

async / await 要点:


await 后面可以追加 promise 对象,获取 resolve 的值

await 必须包裹在 async 函数里面

async 函数执行返回的也是一个 promise 对象

try-catch 截获 promise 中 reject 的值

下面我们新建一个 index.js 文件和几个 xx.json 文件,进行一下 async / await 的测试


index.js

const fs = require('fs')
const path = require('path')
// 用 promise 获取文件内容
function getFileContent(fileName) {
    const promise = new Promise((resolve, reject) => {
        // 获取文件全名
        const fullFileName = path.resolve(__dirname, 'files', fileName)
        // 读取文件
        fs.readFile(fullFileName, (err, data) => {
            if (err) {
                reject(err)
                return
            }
            resolve(
                JSON.parse(data.toString())
            )
        })
    })
    return promise
}
async function readFileData() {
    try {
        const aData = await getFileContent('a.json')
        console.log('a data', aData)
        const bData = await getFileContent(aData.next)
        console.log('b data', bData)
        const cData = await getFileContent(bData.next)
        console.log('c data', cData)
    } catch {
        console.error(err)
    }
}
readFileData()

a.json

{
    "next": "b.json",
    "msg": "this is a"
}

b.json

{
    "next": "c.json",
    "msg": "this is b"
}

c.json

{
    "next": null,
    "msg": "this is c"
}


6fc497600a434796b45dc3f66b3bb885.png

2、安装 koa2

安装 Koa 项目的脚手架工具

npm install koa-generator -g

创建 blog-koa2 项目

koa2 blog-koa2

安装依赖

npm install

安装环境参数

npm i cross-env --save-dev

修改 package.json 文件(开发环境dev和生成环境prd)

package.json

  "scripts": {
    ......
    "dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
    "prd": "cross-env NODE_ENV=production pm2 start bin/www",
  },

修改 www.js 代码中的 port 端口为 8000

var port = normalizePort(process.env.PORT || '8000');
• 1

终端运行:

c0241e5fa1cb4120a49dbb327085d421.png


三、测试路由

首先我们参照 ./routers/index.js 或 ./routers/users.js 创建 blogs.js 文件


2edd362cf67e4b509bb84d4dd8c68951.png

我们在 blog.js 文件中写路由前缀为 /api/blog,创建请求类型为 get 的 list 接口

blog.js

const router = require('koa-router')()
// 前缀
router.prefix('/api/blog')
router.get('/list', async function (ctx, next) {
    const query =  ctx.query
    ctx.body = {
        errno: 0,
        query,
        data: ['获取博客列表']
    }
})
module.exports = router

修改 app.js 文件,导入并使用 blog 路由

app.js

const blog = require('./routes/blog')
......
app.use(blog.routes(), blog.allowedMethods())

b0320b370b6c44da88ff0725e6a2e10f.pngb8119c086cac49968d4ec7a021376afa.png

同理,接下来我们创建并配置 user.js 路由

user.js

const router = require('koa-router')()
// 前缀
router.prefix('/api/user')
// 路由的中间件必须是个 async 函数
router.post('/login', async function (ctx, next) {
    // 通过 request.body 获取
    const {username, password} = ctx.request.body
    ctx.body = {
        errno: 0,
        username,
        password
    }
})
module.exports = router

app.js

const user = require('./routes/user')
......
app.use(user.routes(), user.allowedMethods())

通过 postman/apipost 接口测试工具测试


四、写在最后


至此,我们明白了 async / await 实现异步的写法、如何安装koa2、如何搭建开发环境以及一些路由的测试, 继续跟进学习吧!

后续会对该项目进行多次重构【多种框架(express,koa)和数据库(mysql,sequelize,mongodb)】


相关文章
|
10天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
1月前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
219 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
85 1
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
73 2
|
3月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
2月前
|
安全 测试技术 持续交付
云计算时代的软件开发与测试:高效、灵活、可扩展
云计算时代的软件开发与测试:高效、灵活、可扩展
|
2月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
43 1
JavaScript中的原型 保姆级文章一文搞懂
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
130 2
|
2月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
27 0

热门文章

最新文章