站长资讯网
最全最丰富的资讯网站

egg.js是node么

egg.js是node框架,是一个继承于Koa的node.js框架;egg.js框架不同于exporess、koa等基础框架,egg.js在应用级的提炼封装,使其更贴近业务场景,更快上手。

egg.js是node么

本教程操作环境:Windows10系统、egg.js v2.0.0版、Dell G3电脑。

egg.js是node么?

是。

了解 egg.js

Egg 是一个继承于 Koa 的 node.js 框架。不同于 exporess、koa 等基础框架,egg.js 在应用级的提炼封装,使其更贴近业务场景,更快上手。

Egg 按照约定进行开发,奉行『约定优于配置』,团队协作成本低

安装

npm init egg npm i npm run dev
登录后复制

一个基础的 API 大致由路由、获取请求参数、逻辑处理、返回响应数据几部分组成

路由

app/router.js 用于配置 URL 路由规则

router.get("/", controller.home.index); // 当访问GET '/' ,app/controller/home.js 下的 index 方法会执行 router.post("/create", controller.user.create); // 当访问POST '/create' ,app/controller/user.js 下的 create 方法会执行
登录后复制

获取请求参数

this.ctx.query获取 URL 中 ? 后面的部分参数

// GET /posts?category=egg&language=node // app/controller/post.js class PostController extends Controller {   async listPosts() {     const query = this.ctx.query;     // {     //   category: 'egg',     //   language: 'node',     // }   } }
登录后复制

this.ctx.params获取路由中的动态参数

// app.get('/projects/:projectId/app/:appId', controller.app.listApp); // GET /projects/1/app/2 class AppController extends Controller {   async listApp() {     const params = this.ctx.params;     // {     //   projectId: '1',     //   appId: '2'     // }   } }
登录后复制

this.ctx.request.body获取 body 参数

// POST /api/posts HTTP/1.1 // Host: localhost:3000 // Content-Type: application/json; charset=UTF-8 // // {"title": "controller", "content": "what is controller"} class PostController extends Controller {   async listPosts() {     const body = this.ctx.request.body;     // {     //   title: 'controller',     //   content: 'what is controller'     // }   } }
登录后复制

返回响应数据

this.ctx.body返回响应数据

class ViewController extends Controller {   async show() {     // 返回Content-Type为application/json的body     this.ctx.body = {       name: "egg",       category: "framework",       language: "Node.js",     };   }   async page() {     // 返回Content-Type为text/html的body     this.ctx.body = "<html><h1>Hello</h1></html>";   } }
登录后复制

使用 mysql 数据库

安装 mysql 插件

npm i egg-mysql
登录后复制

配置

// config/plugin.js exports.mysql = {   enable: true,   package: "egg-mysql", }; // config/config.${env}.js exports.mysql = {   // 单数据库信息配置   client: {     // host     host: "localhost",     // 端口号     port: "3306",     // 用户名     user: "root",     // 密码     password: "root",     // 数据库名     database: "database",   }, };
登录后复制

使用

// 查找id 为 ${uid}的用户 await this.app.mysql.get("users", { id: uid });
登录后复制

处理业务逻辑

业务逻辑建议放在app/service中,当然也包括数据库的操作

// app/service/user.js const Service = require("egg").Service; class UserService extends Service {   async find(uid) {     // 假如 我们拿到用户 id 从数据库获取用户详细信息     const user = await this.app.mysql.get("users", { id: uid });     return user;   } } module.exports = UserService;
登录后复制

之后可以通过 Controller 获取 Service 层拿到的数据。

// app/controller/user.js class UserController extends Controller {   async info() {     const ctx = this.ctx;     const userId = ctx.params.id;     // 调用service层的user下的find方法     const user = await ctx.service.user.find(userId);     ctx.body = user;   } }
登录后复制

基本 CURD 语句可以使用 create、get、select、update、delete 方法

直接执行 sql 语句可使用 query 方法

事务的控制

egg.js 官网:https://www.eggjs.org/zh-CN/
登录后复制

推荐学习:《node.js视频教程》

赞(0)
分享到: 更多 (0)