首页 > 编程语言 >node.js Koa框架学习记录2

node.js Koa框架学习记录2

时间:2025-01-17 18:28:28浏览次数:3  
标签:node use const Koa app ctx js router

在上一篇文章我们初步学习了写一个简单的接口,这次对目录结构以及统一数据格式,异常错误的处理

目录结构优化:


前端请求方法错误,我们可以通过在 app.use(router.routes())后面追加一个use,告诉前端请求方法错了,而不是404 Not found:

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

        如果都将路由放在 app.js 有很多路由的话会导致代码非常的冗余,又要设置响应体,对后期代码维护并不是很友好。

        新建一个router.js文件,专门放路由,再建一个 controller 文件夹,在里面通过类的方式对请求进行操作


在user.js文件中:

class User {
  // 登录
  async userLogin(ctx) {
    const {phone,name} = ctx.request.body;
    console.log(ctx)
    console.log(phone,name)
    console.log(123)
  }
}
// 暴露出去
module.exports = new User();

在router.js文件中,我们将这段代码从app.js中剪切过去:

const Router = require("@koa/router");
const router = new Router();
const Router = require("@koa/router");
const router = new Router();
//引入controller
const user = require('./controller/user')
//使用 router.post 方法定义一个 POST 请求的路由,路径为 /login。
// 当接收到 /login 的 POST 请求时,
// 调用 user 模块中的 userLogin 方法来处理请求。
router.post('/login',user.userLogin)



// 导出路由
module.exports = router;

在app.js文件中导入我们写的路由:

const router = require('./router');

我们发送请求试一下:

统一接口返回数据格式:

新建一个config文件夹,在result.js中编写响应中间件:

ctx.send 方法用于在处理完用户登录请求后,将响应发送回客户端,在这里我们设置默认的响应格式,其中的serviceCode指的就是业务状态码

//统一接口返回数据格式

const result = async (ctx,next) => {
  //ctx.send() 方法用于在处理完用户登录请求后,将响应发送回客户端。
  // 设置默认的响应格式
  ctx.send = (
    data = null,
    msg = "success",
    code = 200,
    error = null,
    serviceCode = 200
  ) => {
    ctx.body = {
      serviceCode,
      msg,
      data,
      error,
    };
    ctx.status = code;
  };
  await next();
};

module.exports = result

之后我们在app.js文件中引入我们写的响应中间件,我们要注意中间件的使用顺序:

//引入中间件
const Koa = require('koa')
const app = new Koa()
const json = require('koa-json')
const bodyPareser = require('koa-bodyparser')
const cors = require("@koa/cors");
const result = require('./config/result')
// 导入我们写的路由
const router = require('./router');

// 使用中间件
app.use(json());
app.use(bodyPareser());
app.use(cors());

// 路由
app.use(result);
app.use(router.routes()).use(router.allowedMethods());


// 监听 6000 端口
app.listen(6000)

console.log('app is start at port 6000')

在user.js 文件中我们直接通过ctx.send(),传值就可以了:

class User {
  // 登录
  async userLogin(ctx) {
    const {phone,name} = ctx.request.body;
    console.log(ctx)
    console.log(phone,name)
    console.log(123)
    ctx.send({phone,name},"登录成功")
  }
}
// 暴露出去
module.exports = new User();

异常错误中间件:

创建一个 errorhandler.js 文件:

确保在发生错误时能够返回适当的错误响应给客户端。通过使用 try-catch 块和异步函数,能够处理异步操作中可能出现的错误,并提供统一的错误处理机制。

const errorHandler = async (ctx,next) => {
  try{
    await next()
    //如果发生错误,错误会被捕获并传递给 catch 块中的 errorData 参数。
  }catch (errorData) {
    const error = errorData.message || '服务器错误'
    const status = errorData.status || errorData.statusCode ||500
    ctx.send(null, error, status, "服务器错误",500);
  }
}

module.exports = errorHandler

在 app.js 文件中引入,也要注意顺序:

app.use(result);
app.use(errorHandler);   //引入
app.use(router.routes()).use(router.allowedMethods());

设置一些错误:

标签:node,use,const,Koa,app,ctx,js,router
From: https://blog.csdn.net/m0_74350369/article/details/145141805

相关文章

  • NodeJS“学雷锋”志愿者管理系统-计算机毕设 附源码 39269
    NodeJS“学雷锋”志愿者管理系统目 录摘要1绪论1.1研究背景与意义1.2开发现状1.3论文结构与章节安排2 “学雷锋”志愿者管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功......
  • 使用 pdf.js 通过文件流方式加载pdf文件
    关于Pdf.js的基础知识,请参考我的博客 使用pdf.js在网页中加载pdf文件使用pdf.js跨域问题的处理方法    上面两篇博客中介绍的内容都是基于直接加载远程服务器中静态PDF文件(即URL地址)来渲染PDF的,实际业务场景中,如与第三方系统对接过程中,第三方系统不直接公开......
  • JSP美发信息综合服务与管理系统5hxk2(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着人们生活水平的提高,越来越多的人开始注重个人形象和美容美发。传统的手工管理方式已经无法满足现代美发店的需求,因此,开发美......
  • JSP芒果分销系统s94qu--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、题目芒果分销系统的设计与实现二、研究背景及意义随着信息技术的飞速发展,农业与信息技术的融合已成为推动农业现代化进程的关键力量。果农及......
  • 【前端进阶】在AI浪潮下前端如何结合应用于程序中,如:Brain.js创建模型
    前端和人工智能(AI)的结合可以创造非常丰富的用户体验,从简单的基于规则的交互到复杂的机器学习模型驱动的功能。在Web应用程序中集成AI可以增强用户交互、个性化内容推荐、图像和语音识别、自然语言处理等。前端与AI的结合应用聊天机器人(Chatbots):通过集成NLP(自然语言处理)技......
  • 【华为OD-E卷 - 最大花费金额 100分(python、java、c++、js、c)】
    【华为OD-E卷-最大花费金额100分(python、java、c++、js、c)】题目双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能的花完资金。现在请你设计一个程序帮助小明计算尽可能花费的最大资金数......
  • 【华为OD-E卷 - 一种字符串压缩表示的解压 100分(python、java、c++、js、c)】
    【华为OD-E卷-一种字符串压缩表示的解压100分(python、java、c++、js、c)】题目有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串“aaabbccccd”经过压缩成为字符串“3ab......
  • 基于JAVA中的spring框架和jsp实现驾驶知识学习和评测系统项目【附项目源码+论文说明】
    摘要在21世纪这个信息高度发达,并且高速流通的时代,计算机的普及以及计算机网络技术的应用,让大量普通人能够有机会接触到比以往更多的知识。作为一个以传播知识为主要职能的机构——学校,建立一个自己的精品课程网站是十分必要的事情,这不仅能使更多的人享用宝贵的教育资料源,同时......
  • BPMN.JS从入门到进阶
    BPMN.js从基础到进阶详解BPMN.js是一个强大的JavaScript库,用于在浏览器中创建和交互BPMN(业务流程建模与标注)图表。以下将从基础到进阶,详细解析BPMN.js的使用方法及相关特性。一、基础篇:了解BPMN.js1.什么是BPMN.js?BPMN.js是一个开源的JavaScript库,基于bp......
  • 基于JAVA中的spring框架和jsp实现大学生综合测评系统项目【内附项目源码+论文说明】
    摘要大学生综合测评系统是一款以大学生德智体等综合成绩进行评测的系统, 其开发基于B/S模式的网上评测的实现,采用的是JSP+sqlserver数据库为主要模式。在线评测平台是凌架于互联网系统上的一个评测平台,是地面评测系统的一种延伸和互补,也是实现无纸化评测的主要工具。当下在......