>웹 프론트엔드 >프런트엔드 Q&A >egg.js 노드인가요?

egg.js 노드인가요?

藏色散人
藏色散人원래의
2022-12-29 14:51:501974검색

egg.js는 Koa에서 상속된 node.js 프레임워크입니다. egg.js 프레임워크는 exporess 및 koa와 같은 기본 프레임워크와 다르며 애플리케이션 수준에서 더 가깝게 만들기 위해 개선되었습니다. 비즈니스 시나리오를 더 빠르게 시작하세요.

egg.js 노드인가요?

이 튜토리얼의 운영 환경: Windows 10 시스템, egg.js v2.0.0 버전, Dell G3 컴퓨터.

egg.js가 노드인가요?

그렇습니다.

egg.js 이해하기

Egg는 Koa에서 상속받은 node.js 프레임워크입니다. exporess 및 koa와 같은 기본 프레임워크와 달리 egg.js는 애플리케이션 수준에서 정제되고 캡슐화되어 비즈니스 시나리오에 더 가깝고 더 빠르게 시작할 수 있습니다.

Egg는 "구성보다 관례"를 준수하여 계약에 따라 개발되며 팀 협업 비용이 저렴합니다.

설치

npm init egg
npm i
npm run dev

기본 API는 대략 라우팅, 요청 매개변수 획득, 논리적 처리 및 응답 데이터 반환

Routing

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의 동적 매개변수는 본문 매개변수를 가져옵니다

// 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/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;

The 서비스 계층에서 얻은 데이터는 컨트롤러를 통해 얻을 수 있습니다.

// 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 문을 직접 실행하려면 쿼리 메소드를 사용할 수 있습니다.

Transaction control

egg.js 官网:https://www.eggjs.org/zh-CN/

추천 학습: "node.js 비디오 튜토리얼 "

위 내용은 egg.js 노드인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.