服务Server
定义service
const Service = require('egg').Service
class UserService extends Service {
async find (uid) {
const user = await this.ctx.mysql.query('SELECT * FROM user WHERE uid=?', uid);
return user;
}
}
module.exports = UserService;
· this.ctx: 当前请求的上下文Context对象的实例,处理当前请求的各种属性和方法
· this.app: 当前应用Application对象的实例,获取框架提供的全局对象和方法
· this.service: 应用定义的Service,可以访问到抽象出的业务层,等价于this.ctx.service
· this.config: 应用运行时的配置项
· this.logger: logger对象,对象上有四个方法(debug, info, warn, error)分别代表打印不同级别的日志
Service ctx 详解
可以直接通过this.ctx获取上下文相关信息,拿到框架给我们封装的各种便捷属性
· this.ctx.curl 发起网络请求
· this.ctx.service.otherService 调用其他的Service
· this.ctx.db 发起数据库调用等等
注意事项
· Service文件必须放在app/service目录,可以支持多级目录。访问的时候通过目录名级联访问
· 一个Service文件只能包含一个类,这个类需要通过module.exports的方式返回
· Service需要通过class的方式定义,父类必须是egg.Service
· Service不是单例,是请求级别的对象,框架每次请求首次访问ctx.service.xx时会延迟实例化,
所以Service可以通过this.ctx获取到当前的上下文
Service的使用
module.exports = app => {
app.router.get('/user/:id', app.controller.user.info);
};
const Controller = require('egg').Controller;
class UserController extends Controller {
async info() {
const { ctx } = this;
const userId = ctx.params.id;
const userInfo = await ctx.service.user.find(userId);
ctx.body = userInfo;
}
}
module.exports = UserController;
const Service = require('egg').Service;
class UserService extends Service {
async find(uid) {
const user = await this.ctx.db.query('select * from user where uid = ?', uid);
const picture = await this.getPicture(uid);
return {
name: user.user_name,
age: user.age,
picture,
};
}
async getPicture(uid) {
const result = await this.ctx.curl(`http://photoserver/uid=${uid}`, { dataType: 'json' });
return result.data;
}
}
module.exports = UserService;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!