【利用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

目录
打赏
0
0
0
0
51
分享
相关文章
Archon – 开源 AI 智能体框架,自主生成代码构建 AI 智能体
Archon 是一个开源的 AI 智能体框架,能够自主生成代码并优化智能体性能,支持多智能体协作、领域知识集成和文档爬取等功能,适用于企业、教育、智能家居等多个领域。
117 10
Archon – 开源 AI 智能体框架,自主生成代码构建 AI 智能体
PRefLexOR:MIT自进化AI框架上线!动态知识图谱+跨域推理,重塑自主思考
PRefLexOR 是 MIT 团队推出的新型自学习 AI 框架,结合偏好优化和强化学习,通过递归推理和多步反思,动态生成知识图谱,支持跨领域推理和自主学习。
95 3
PRefLexOR:MIT自进化AI框架上线!动态知识图谱+跨域推理,重塑自主思考
DeepSeek 速成指南:普通人也能秒懂的 AI 实战手册
DeepSeek 是一款强大的中文大语言模型,能处理长文本、多模态输入,适用于职场、学习、生活等场景。它擅长文案创作、数据分析与复杂任务拆解,相比 ChatGPT,在中文表达和网络热梗上更具优势。掌握精准提问、结果校验和效率工具三大技能,可大幅提升使用效果。同时,避免过度依赖、隐私泄露和伦理模糊的“三大天坑”,并通过角色扮演、思维链拆解等进阶技巧挖掘潜力。DeepSeek 不是替代品,而是助力你高效完成任务、拓展知识边界的超级大脑。未来属于善于与 AI 协作的人,立即行动,设计专属协作流程!
30 0
DeepSeek 速成指南:普通人也能秒懂的 AI 实战手册
Spring AI与DeepSeek实战二:打造企业级智能体
本文介绍如何基于Spring AI与DeepSeek模型构建企业级多语言翻译智能体。通过明确的Prompt设计,该智能体能自主执行复杂任务,如精准翻译32种ISO标准语言,并严格遵循输入格式和行为限制。代码示例展示了如何通过API实现动态Prompt生成和翻译功能,确保服务的安全性和可控性。项目已开源,提供更多细节和完整代码。 [GitHub](https://github.com/zlt2000/zlt-spring-ai-app) | [Gitee](https://gitee.com/zlt2000/zlt-spring-ai-app)
127 11
【最佳实践系列】AI程序员让我变成全栈:基于阿里云百炼DeepSeek的跨语言公告系统实战
本文介绍了如何在Java开发中通过跨语言编程,利用阿里云百炼服务平台的DeepSeek大模型生成公告内容,并将其嵌入前端页面。
通义灵码 AI实战《手把手教你用通义灵码写一个音乐电子小闹钟》
通义灵码DeepSeek版本相比qwen2.5,增强了深度思考和上下文理解能力,显著提升了开发效率,尤其适合代码能力较弱的运维人员,真正实现了“代码即服务”。
125 1
企业内训|AI赋能业务和研发实战训练营-某卫星通信公司
TsingtaoAI为北京某卫星通信公司交付AI赋能业务和研发实战训练营,课程一共3天,覆盖全体员工和研发人员。本课程基于该公司“天地海一体化”业务场景,融合最新AI工具链与大模型技术(如DeepSeek、Coze、通义法睿等),以“场景驱动、工具落地、技术深化”为核心逻辑,覆盖全员通用能力与研发专项能力,通过案例实战实现业务与技术的双提升。
43 0
从零开始即刻拥有 DeepSeek-R1 满血版并使用 Dify 部署 AI 应用
本文介绍了如何使用阿里云提供的DeepSeek-R1大模型解决方案,通过Chatbox和Dify平台调用百炼API,实现稳定且高效的模型应用。首先,文章详细描述了如何通过Chatbox配置API并开始对话,适合普通用户快速上手。接着,深入探讨了使用Dify部署AI应用的过程,包括选购云服务器、安装Dify、配置对接DeepSeek-R1模型及创建工作流,展示了更复杂场景下的应用潜力。最后,对比了Chatbox与Dify的输出效果,证明Dify能提供更详尽、精准的回复。总结指出,阿里云的解决方案不仅操作简便,还为专业用户提供了强大的功能支持,极大提升了用户体验和应用效率。
986 19
从零开始即刻拥有 DeepSeek-R1 满血版并使用 Dify 部署 AI 应用
AI程序员:通义灵码 2.0应用VScode前端开发深度体验
AI程序员:通义灵码 2.0应用VScode前端开发深度体验,在软件开发领域,人工智能技术的融入正深刻改变着程序员的工作方式。通义灵码 2.0 作为一款先进的 AI 编程助手,与广受欢迎的代码编辑器 Visual Studio Code(VScode)相结合,为前端开发带来了全新的可能性。本文将详细分享通义灵码 2.0 在 VScode 前端开发环境中的深度使用体验。
136 2
牛逼,这款开源聊天应用竟能一键召唤多个AI助手,跨平台通话神器!
`JiwuChat`是一款基于Tauri2和Nuxt3构建的轻量化多平台即时通讯工具,仅约8MB体积却集成了**AI群聊机器人**、**WebRTC音视频通话**、**屏幕共享**等前沿功能。一套代码适配Windows/macOS/Linux/Android/iOS/Web六大平台,堪称开发者学习跨端开发的绝佳样板!

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等