이번에는 노트가 무엇인지 알려드리겠습니다. 실제 사례를 살펴보겠습니다.
이번에는 Egg.js에서 HTTP 매개변수를 얻는 방법과 Egg.js에서 HTTP 매개변수를 얻을 때 주의사항이 무엇인지 보여드리겠습니다. 다음은 실제 사례입니다.
Egg.js 프레임워크에서 Controller는 기본적으로 비즈니스 개발에서 HTTP 프로토콜과 상호 작용하는 유일한 장소이므로 프레임워크는 사용자가 보내는 내용을 얻기 위해 Controller에 바인딩된 Context 인스턴스를 통해 많은 편리한 메서드와 속성을 제공합니다. HTTP 요청이 매개변수를 전달했습니다. 이 문서에서는 http 요청 매개변수를 얻는 방법을 요약합니다.
1.query
URL에서? 다음 부분은 GET 유형 요청에서 매개변수를 전달하는 데 자주 사용됩니다. 예를 들어, GET /search?name=egg&age=26에서 name=egg&age=26은 사용자가 전달한 매개변수입니다. context.query(객체)를 통해 구문 분석된 매개변수 본문을 얻을 수 있습니다
module.exports = app => { class SearchController extends app.Controller { * search() { const queryObj = this.ctx.query; console.log(queryObj.age); console.log(queryObj); //打印结果:{ name: 'egg', age: '26' } } } return SearchController; };
쿼리 문자열의 키가 반복되면 context.query는 키가 처음 나타날 때만 값을 가져오고 이후의 모든 항목에서는 값을 가져옵니다. 무시됩니다. GET /posts?category=egg&category=koa context.query를 통해 얻은 값은 {category: 'egg' }입니다.
1.1 쿼리
때때로 우리 시스템은 사용자가 GET /posts?category=egg&id=1&id=2&id=3과 같은 동일한 키를 전달할 수 있도록 설계되었습니다. 이러한 상황에 대해 프레임워크는 쿼리 문자열도 구문 분석하는 context.queries 객체를 제공하지만 중복 데이터를 삭제하지 않고 모두 배열에 넣습니다.
// GET /posts?category=egg&id=1&id=2&id=3const Controller = require('egg').Controller;module.exports = class PostController extends Controller { * listPosts() { console.log(this.ctx.queries); //result: // { // category: [ 'egg' ], // id: [ '1', '2', '3' ], // } } };
context.queries 모든 키에 값이 있으면 배열 유형이어야 합니다.
2. 라우터 매개변수
라우터에서도 매개변수를 선언할 수 있으며 이러한 매개변수는 context.params를 통해 얻을 수 있다는 것을 알고 있습니다.
// app.get('/projects/:projectId/app/:appId', 'app.listApp');// GET /projects/1/app/2const Controller = require('egg').Controller;module.exports = class AppController extends Controller { * listApp() { assert.equal(this.ctx.params.projectId, '1'); assert.equal(this.ctx.params.appId, '2'); } };
3.body
URL을 통해 매개변수를 전달할 수 있지만 여전히 많은 제한 사항이 있습니다.
브라우저에서는 전달해야 하는 매개변수가 너무 많으면 제한이 없습니다. 통과했다.
서버는 접속한 전체 URL을 로그 파일에 기록하는 경우가 많습니다. URL을 통해 일부 민감한 데이터를 전달하는 것은 안전하지 않습니다.
헤더 뒤에 본문 부분이 있다는 것을 알고 있으며, 일반적으로 이 부분에 POST, PUT, DELETE와 같은 메소드의 매개변수를 전달합니다. 일반적으로 요청에 본문이 있으면 클라이언트(브라우저)도 Content-Type을 보내 이 요청 본문의 형식을 서버에 알려줍니다. 웹 개발에서 데이터 전송에 가장 일반적으로 사용되는 두 가지 형식은 JSON과 Form입니다.
프레임워크에는 이 두 가지 형식의 요청 본문을 object로 구문 분석하고 context.request.body에 마운트하기 위한 bodyParser middleware가 내장되어 있습니다. HTTP 프로토콜에서는 GET, HEAD 메소드를 통해 접근할 때 body를 전달하는 것을 권장하지 않기 때문에 이 방식으로는 GET, HEAD 메소드의 내용을 얻을 수 없다.
// POST /api/posts HTTP/1.1// Host: localhost:3000// Content-Type: application/json; charset=UTF-8//// {"title": "controller", "content": "what is controller"}const Controller = require('egg').Controller;module.exports = class PostController extends Controller { * listPosts() { assert.equal(this.ctx.request.body.title, 'controller'); assert.equal(this.ctx.request.body.content, 'what is controller'); } };
프레임워크는 bodyParser에 대한 일부 기본 매개변수를 설정합니다. 구성 후에는 다음과 같은 특성을 갖습니다.
요청된 Content-Type이 application/json, application/json-patch+json, application/vnd.api+json 및 application/csp-report에서 요청 본문은 json 형식에 따라 구문 분석되며 본문의 최대 길이는 100kb로 제한됩니다.
요청의 Content-Type이 application/x-www-form-urlencoded인 경우 요청 본문은 양식 형식에 따라 구문 분석되며 본문의 최대 길이는 100kb로 제한됩니다.
성공적으로 구문 분석되면 body는 확실히 객체(어쩌면 배열)가 됩니다.
일반적으로 가장 자주 조정되는 구성 항목은 구문 분석 중에 허용되는 최대 길이를 변경하는 것입니다. config/config.default.js
module.exports = { bodyParser: { jsonLimit: '1mb', formLimit: '1mb', }, };
사용자의 요청 본문이 구문 분석을 초과하는 경우 프레임워크의 기본값을 재정의할 수 있습니다. 구성된 최대 길이는 상태 코드 413으로 예외를 발생시킵니다. 사용자가 요청한 본문이 구문 분석에 실패하면(잘못된 JSON) 상태 코드 400으로 예외가 발생합니다.
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요! 추천 자료:하나의 SQL 문으로 여러 데이터베이스를 쿼리하는 방법
JS는 선택 드롭다운 상자의 첫 번째 요소에서 값을 가져옵니다
위 내용은 Egg.js에서 HTTP 매개변수를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!