【利用AI让知识体系化】入门Egg框架(含实战)(二)

简介: 【利用AI让知识体系化】入门Egg框架(含实战)

【利用AI让知识体系化】入门Egg框架(含实战)(一)https://developer.aliyun.com/article/1426068


3.2 模板渲染和视图

在 Egg.js 应用中,模板渲染和视图也是实现页面展示和用户交互的重要组成部分。

模板渲染

Egg.js 默认使用模板引擎 nunjucks,支持多种模板文件格式,如 .html.nunjucks.nj 等。

在 Egg.js 中,可以通过 app.view.use('nunjucks', nunjucks) 方法启用 nunjucks 模板引擎,然后使用 this.ctx.render() 方法渲染模板文件。通常,模板文件的根目录是 /app/view,渲染的文件名不需要后缀,例如:

// 启用模板引擎
const nunjucks = require('nunjucks');
module.exports = app => {
  app.view.use('nunjucks', nunjucks.configure('app/view', {
    autoescape: true
  }));
};
// 控制器中渲染模板文件
class HomeController extends Controller {
  async index() {
    const { ctx } = this;
    await ctx.render('index', { data: 'hello world' });
  }
}

在上述代码中,模板文件的根目录是 app/view,渲染的文件名是 index。在控制器中,使用 this.ctx.render() 方法渲染模板文件,并传入需要注入的数据对象。

视图

在 Egg.js 应用中,视图的实现方式和其他框架类似。视图通常是由模板引擎根据模板文件渲染生成,可以通过模板引擎向视图中注入数据来实现动态页面展示和用户交互的效果。

与模板引擎相关的视图文件通常位于 /app/view 目录下,可以根据需要自行组织子目录。在控制器中,通过 this.ctx.render() 方法渲染视图,并通过第二个参数传入要注入的数据对象。

在 Egg.js 应用中,可以使用多种模板引擎,根据需要进行选择和配置。同时,视图的实现方式也可以和其他框架一样,通过 HTML、CSS 和 JavaScript 等前端技术实现视图的效果。

3.3 静态资源和文件上传

在 Egg.js 应用中,静态资源和文件上传也是实现页面展示和用户交互的重要组成部分。

静态资源

在 Egg.js 应用中,可以使用 egg-static 插件提供静态资源服务。在项目中安装 egg-static 插件:

npm i egg-static --save

安装完毕之后,在应用的 config/config.default.js 里面配置静态文件存放路径:

exports.static = {
  prefix: '/public/',
  dir: path.join(appInfo.baseDir, 'app/public'),
};

在上述代码中,prefix 是访问静态资源的 URI 的前缀,dir 是静态资源存放的目录,根据实际需求进行配置。

之后使用以下代码启用中间件,在路由之前处理静态资源的请求:

// config/config.default.js
module.exports = app => {
  app.config.coreMiddleware.unshift('static');
};

文件上传

在 Egg.js 应用中,可以使用 egg-multipart 插件实现文件上传。安装 egg-multipart 插件:

npm i egg-multipart --save

安装完毕之后,在应用的 config/plugin.js 文件中启用插件,并定义插件的配置:

exports.multipart = {
  mode: 'file',
  fileSize: '10mb',
  whitelist: [
    '.jpeg',
    '.jpg',
    '.png',
    '.gif',
    '.bmp',
    '.txt',
    '.doc',
    '.docx',
    '.zip',
    '.rar',
    '.gzip',
  ],
};

在控制器中,可以通过 this.ctx.request.files 获取上传的文件:

async upload() {
  const { ctx } = this;
  const file = ctx.request.files[0];
  const { name, path } = file;
  // 处理上传的文件
  ...
  ctx.body = { name, path };
}

上传的文件会被存储在 Egg.js 应用的临时文件夹中,使用 this.ctx.request.files 获取上传的文件路径,可以对文件进行后续的处理或保存。结果被序列化为一个对象,包含文件的名称、路径和大小等信息。

以上是 Egg.js 中处理静态资源和文件上传的常用方法,可以根据实际需求进行定制和配置

3.4 数据库连接和操作

在 Egg.js 应用中,可以使用 egg-sequelize 插件连接和操作 MySQL、PostgreSQL、SQLite 和 MSSQL 等关系型数据库。

连接数据库

在 Egg.js 应用中,可以在 config/config.default.js 中配置数据库连接信息:

const Sequelize = require('sequelize');
exports.sequelize = {
  dialect: 'mysql',
  host: 'localhost',
  port: 3306,
  database: 'testdb',
  username: 'testuser',
  password: 'testpass',
  define: {
    timestamps: true,
    paranoid: true,
    underscored: true,
    freezeTableName: true,
  },
  timezone: '+08:00',
  dialectOptions: {
    dateStrings: true,
    typeCast: true,
  },
  pool: {
    max: 5,
    min: 0,
    idle: 10000,
  },
};

在以上示例中,定义了连接MySQL测试数据库的相关信息,通过 exports.sequelize 属性导出。其中,

  • dialect 定义了要连接的数据库类型。
  • hostport 定义了数据库的主机名和端口号。
  • database 定义了要连接的数据库名称。
  • usernamepassword 定义了连接数据库的用户名和密码。

操作数据库

一般情况下,我们会在控制器中操作数据库。以下是一个示例,以获取用户列表为例:

class UserController extends Controller {
  async index() {
    const { ctx } = this;
    const users = await ctx.model.User.findAll();
    ctx.body = users;
  }
}

使用 ctx.model.xxx 可以访问模型对象。在数据库查询时,通常会使用 await 关键字,待查询结束后获取返回的结果即可。

除此以外,还有很多其他的操作数据库的方法,可根据需求进行探索和使用。

需要注意的是,不同数据库的连接方式、查询方式等可能会有所不同,具体的实现方式需参考具体数据库的文档,并结合 Egg.js 的使用方式进行实现。

3.5 Cookie 和 Session

在 Egg.js 应用中,Cookie 和 Session 是管理 HTTP 请求和响应的重要组成部分。

Cookie

Cookie 是一种用于存储小量数据的机制。在 Egg.js 应用中,可以通过 this.cookies.set() 方法设置 Cookie,通过 this.cookies.get() 方法获取 Cookie。例如:

// 设置 cookie
this.cookies.set('username', 'testuser');
// 获取 cookie
const username = this.cookies.get('username');

在以上示例中,this.cookies.set() 方法设置了一个名为 username 的 Cookie,值为 testuserthis.cookies.get() 方法获取名为 username 的 Cookie 的值,并将其保存在 username 变量中。

除了设置和获取 Cookie 之外,还可以通过设置 Cookie 的属性修改其有效期、域和路径等信息。例如:

this.cookies.set('username', 'testuser', {
  maxAge: 3600 * 1000, // 1 hour
  httpOnly: true,
});

在以上示例中,maxAge 属性设置 Cookie 的失效时间,单位为毫秒;httpOnly 属性设置 Cookie 是否仅允许服务器访问,防止 XSS 攻击。

Session

Session 是一种在客户端和服务器端之间存储用户数据的机制。在 Egg.js 应用中,可以使用 egg-session 插件实现 session 管理。首先,在应用中安装 egg-session 插件:

npm i egg-session --save

配置及启用 session:

// config/config.default.js
exports.session = {
  key: 'SESSION_ID',
  maxAge: 86400000,
  httpOnly: true,
  encrypt: true,
};
// app.js
app.use(session(app));

在以上示例中,exports.session 配置了 Session 的名称、有效期、是否仅允许服务器访问和是否需要加密传输。在 app.js 文件中启用了 session 中间件。

在路由中使用 Session:

await ctx.session.set('username', 'testuser');
const username = await ctx.session.get('username');

在以上示例中,使用 ctx.session.set() 方法设置 Session 的值,使用 ctx.session.get() 方法获取 Session 的值。

需要注意的是,Session 的数据量较大时、过于频繁的操作 Session 都会对应用性能产生影响,因此在使用时应当权衡利弊,根据实际需求合理配置和使用。


【利用AI让知识体系化】入门Egg框架(含实战)(三)https://developer.aliyun.com/article/1426070

相关文章
|
6天前
|
人工智能 机器人 UED
不怕不会设计logo拉-本篇教你如何使用AI设计logo-如何快速用AI设计logo-附上AI绘图logo设计的咒语-优雅草央千澈-实战教程
不怕不会设计logo拉-本篇教你如何使用AI设计logo-如何快速用AI设计logo-附上AI绘图logo设计的咒语-优雅草央千澈-实战教程
116 85
不怕不会设计logo拉-本篇教你如何使用AI设计logo-如何快速用AI设计logo-附上AI绘图logo设计的咒语-优雅草央千澈-实战教程
|
4天前
|
人工智能 数据处理 语音技术
Pipecat实战:5步快速构建语音与AI整合项目,创建你的第一个多模态语音 AI 助手
Pipecat 是一个开源的 Python 框架,专注于构建语音和多模态对话代理,支持与多种 AI 服务集成,提供实时处理能力,适用于语音助手、企业服务等场景。
51 23
Pipecat实战:5步快速构建语音与AI整合项目,创建你的第一个多模态语音 AI 助手
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
Agent Laboratory:AI自动撰写论文,AMD开源自动完成科研全流程的多智能体框架
Agent Laboratory 是由 AMD 和约翰·霍普金斯大学联合推出的自主科研框架,基于大型语言模型,能够加速科学发现、降低成本并提高研究质量。
109 23
Agent Laboratory:AI自动撰写论文,AMD开源自动完成科研全流程的多智能体框架
|
6天前
|
人工智能 开发框架 自然语言处理
Eko:一句话就能快速构建复杂工作流的 AI 代理开发框架!快速实现自动操作电脑和浏览器完成任务
Eko 是 Fellou AI 推出的开源 AI 代理开发框架,支持自然语言驱动,帮助开发者快速构建从简单指令到复杂工作流的智能代理。
119 12
Eko:一句话就能快速构建复杂工作流的 AI 代理开发框架!快速实现自动操作电脑和浏览器完成任务
|
12天前
|
人工智能
RealisHuman:AI 生成的人像不真实?后处理框架帮你修复生成图像中畸形人体部位
RealisHuman 是一个创新的后处理框架,专注于修复生成图像中畸形的人体部位,如手和脸,通过两阶段方法提升图像的真实性。
54 11
RealisHuman:AI 生成的人像不真实?后处理框架帮你修复生成图像中畸形人体部位
|
7天前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
43 7
|
6天前
|
人工智能 运维 物联网
云大使 X 函数计算 FC 专属活动上线!享返佣,一键打造 AI 应用
如今,AI 技术已经成为推动业务创新和增长的重要力量。但对于许多企业和开发者来说,如何高效、便捷地部署和管理 AI 应用仍然是一个挑战。阿里云函数计算 FC 以其免运维的特点,大大降低了 AI 应用部署的复杂性。用户无需担心底层资源的管理和运维问题,可以专注于应用的创新和开发,并且用户可以通过一键部署功能,迅速将 AI 大模型部署到云端,实现快速上线和迭代。函数计算目前推出了多种规格的云资源优惠套餐,用户可以根据实际需求灵活选择。
|
2天前
|
人工智能 算法 前端开发
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
OmAgent 是 Om AI 与浙江大学联合开源的多模态语言代理框架,支持多设备连接、高效模型集成,助力开发者快速构建复杂的多模态代理应用。
94 72
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
|
14天前
|
机器学习/深度学习 人工智能 算法
AI在体育分析与预测中的深度应用:变革体育界的智能力量
AI在体育分析与预测中的深度应用:变革体育界的智能力量
80 31
|
10天前
|
人工智能 运维 负载均衡
智能运维新时代:AI在云资源管理中的应用与实践
智能运维新时代:AI在云资源管理中的应用与实践
90 23

热门文章

最新文章