通过实现getData接口了解egg.js

本文通过对比umi的路由,介绍Egg.js的约定式路由,讲解如何在Egg.js中实现getData接口。首先在router定义路径,然后在app/controller创建user.js编写Controller,利用Context对象处理请求,接着实现Service层代码,最终完成getData接口的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

egg的路由umi的路由比较相似,是一种约定式路由的实现。UMI是在指定文件夹下建立相应文件,umi会自动生成路由配置。

对下面这段代码进行增加修改:

'use strict';
//脚手架生成的router.js
/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  router.get('/', controller.home.index);
  //add code
};

写一个getData的接口

  1. 先要在router里面去定义路径
    router.get('/getData',controller.user.getData)
  2. 再实现相应对应路径的Controller
    在\app\controller路径中新增user.js
const Controller = require('egg').Controller;

class UserController extends Controller {
    async getData() {
    	const { ctx } = this;
        ctx.body = {
            code: 0,
            //调用service的方法
            data:await ctx.service.user.getData({})
        };
        ctx.status = 200;
    }
}
modu
Egg.js 中,路由守卫的实现通常通过中间件(Middleware)来完成,用于在请求到达控制器之前进行权限验证或其他前置逻辑处理。Egg.js 的中间件机制非常灵活,可以用于实现诸如 JWT 验证、用户身份校验等功能。 ### 路由守卫的实现方式 1. **定义中间件进行权限验证** 可以创建一个中间件用于检查请求是否携带合法的 token。例如,使用 JWT 进行验证时,中间件可以解析请求头中的 token,并验证其有效性。如果 token 无效,则返回 401 错误;如果有效,则允许请求继续执行。 ```javascript // middleware/jwt.js const jwt = require('jsonwebtoken'); const { JWT_SECRET } = require('../config/config.default'); module.exports = () => { return async function jwtMiddleware(ctx, next) { const token = ctx.header.authorization?.split('Bearer ')[1]; if (!token) { ctx.status = 401; ctx.body = { error: 'No token provided' }; return; } try { const decoded = jwt.verify(token, JWT_SECRET); ctx.state.user = decoded; await next(); } catch (err) { ctx.status = 401; ctx.body = { error: 'Invalid token' }; } }; }; ``` 2. **在路由中应用中间件** 在定义路由时,将上述中间件应用到需要权限验证的接口上。例如,使用 `app.middleware.jwt()` 加载中间件,并将其绑定到特定的路由上。 ```javascript // router.js exports.admin = app => { const { router, controller } = app; const jwt = app.middleware.jwt({}, app); router.post('/api/admin/login', controller.admin.login); router.post('/api/admin/logOut', jwt, controller.admin.logOut); router.post('/api/admin/updateAvatar', jwt, controller.admin.updateAvatar); router.get('/api/admin/findAdminByPage', jwt, controller.admin.findAdminByPage); }; ``` 3. **全局中间件配置(可选)** 如果需要对所有请求进行统一的权限检查,可以将中间件注册为全局中间件。在 `config.default.js` 中配置中间件的加载顺序和启用状态。 ```javascript // config/config.default.js exports.middleware = ['jwt']; exports.jwt = { enable: true, key: 'user', secret: 'your_jwt_secret_key', }; ``` 4. **结合 Cookie 进行登录态维护** 在某些场景下,可以结合 Cookie 来维护用户的登录状态。例如,在登录成功后将 token 存入 Cookie,并在后续请求中自动携带 token。 ```javascript // 登录成功后设置 Cookie ctx.cookies.set('token', token, { httpOnly: true, maxAge: 24 * 60 * 60 * 1000, // 24 hours }); ``` 5. **权限分级控制** 除了基本的身份验证,还可以在中间件中实现更细粒度的权限控制。例如,根据用户角色(如管理员、普通用户)限制对特定接口的访问。 ```javascript // middleware/roleGuard.js module.exports = (requiredRole) => { return async function roleGuardMiddleware(ctx, next) { const user = ctx.state.user; if (!user || user.role !== requiredRole) { ctx.status = 403; ctx.body = { error: 'Forbidden' }; return; } await next(); }; }; ``` ```javascript // router.js const roleGuard = app.middleware.roleGuard('admin'); router.get('/api/admin/secureData', jwt, roleGuard, controller.admin.secureData); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值