在上一篇文章我们初步学习了写一个简单的接口,这次对目录结构以及统一数据格式,异常错误的处理
目录结构优化:
前端请求方法错误,我们可以通过在 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