Maison  >  Article  >  interface Web  >  Comment obtenir les paramètres HTTP dans Egg.js

Comment obtenir les paramètres HTTP dans Egg.js

php中世界最好的语言
php中世界最好的语言original
2018-03-24 09:16:444676parcourir

Cette fois je vous apporte quelles sont les précautionsVoici un cas pratique, jetons un oeil.

Cette fois, je vais vous montrer comment obtenir les paramètres HTTP dans Egg.js, et quelles sont les précautions pour obtenir les paramètres HTTP dans Egg.js. Ce qui suit est un cas pratique, jetons un coup d'oeil.

Dans le framework Egg.js, étant donné que le contrôleur est fondamentalement le seul endroit qui interagit avec le protocole HTTP dans le développement commercial, le framework fournit de nombreuses méthodes et propriétés pratiques pour obtenir des utilisateurs via l'instance de contexte liée au contrôleur. . Paramètres envoyés via des requêtes HTTP. Cet article résume la méthode d'obtention des paramètres de requête http :

1.query

Dans l'URL, la partie suivante est une chaîne de requête, qui est souvent utilisée pour les requêtes de type GET. Transmettez les paramètres. Par exemple, dans GET /search?name=egg&age=26, name=egg&age=26 est le paramètre transmis par l'utilisateur. Nous pouvons obtenir le corps du paramètre analysé via context.query (qui est un objet)

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

Lorsque la clé dans la chaîne de requête est répétée, context.query ne prend la valeur que lorsque la clé apparaît pour la première fois. time , les occurrences ultérieures seront ignorées. GET /posts?category=egg&category=koa La valeur obtenue via context.query est {category: 'egg' }.

Requêtes 1.1

Parfois, notre système est conçu pour permettre aux utilisateurs de transmettre la même clé, telle que GET /posts?category=egg&id=1&id=2&id=3. Pour de telles situations, le framework fournit l'objet context.queries, qui analyse également la chaîne de requête, mais il ne supprime pas les données en double, mais les place toutes dans un tableau :

// 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' ],
    // }
  }
};

Si toutes les clés sont activées context.queries ont des valeurs, elles doivent être des types de tableau.

2. Paramètres du routeur

Nous savons que les paramètres peuvent également être déclarés sur le routeur, et ces paramètres peuvent être obtenus via 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. corps

Bien que nous puissions transmettre des paramètres via l'URL, il existe encore de nombreuses restrictions :

Le navigateur aura des restrictions sur la longueur de l'URL. . Si trop de paramètres doivent être transmis, ils ne le seront pas.

Le serveur enregistre souvent l'URL complète consultée dans le fichier journal. Certaines données sensibles ne sont pas sécurisées lorsqu'elles sont transmises via l'URL.

Nous savons qu'il y a une partie du corps après l'en-tête, et nous transmettons généralement les paramètres des méthodes telles que POST, PUT et DELETE dans cette partie. Généralement, lorsqu'il y a un corps dans la requête, le client (navigateur) enverra également Content-Type pour indiquer au serveur quel est le format du corps de cette requête. Les deux formats les plus couramment utilisés pour le transfert de données dans le développement Web sont JSON et Form.

Le framework intègre un bodyParser middleware pour analyser le corps de la requête de ces deux types de formats en objet et le monter sur context.request.body. Dans le protocole HTTP, il n'est pas recommandé de transmettre le corps lors de l'accès via les méthodes GET et HEAD, nous ne pouvons donc pas obtenir le contenu des méthodes GET et HEAD selon cette méthode.

// 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');
  }
};

Le framework définit certains paramètres par défaut pour bodyParser. Après configuration, il présente les caractéristiques suivantes :

Lorsque le Content-Type demandé est application/json, application/json-patch+. json, lorsque application/vnd.api+json et application/csp-report sont utilisés, le corps de la requête sera analysé selon le format json et la longueur maximale du corps sera limitée à 100 Ko.

Lorsque le Content-Type de la requête est application/x-www-form-urlencoded, le corps de la requête sera analysé en fonction du format du formulaire, et la longueur maximale du corps sera limitée à 100 Ko.

S'il est analysé avec succès, le corps doit être un objet (peut-être un tableau).

De manière générale, l'élément de configuration le plus fréquemment ajusté consiste à modifier la longueur maximale autorisée lors de l'analyse. Vous pouvez remplacer la valeur par défaut du framework dans config/config.default.js

module.exports = {
  bodyParser: {
    jsonLimit: '1mb',
    formLimit: '1mb',
  },
};
Si Si le corps de la requête de l'utilisateur dépasse la longueur maximale de notre analyse configurée, une exception avec un

code d'état de 413 sera levée. Si le corps demandé par l'utilisateur ne parvient pas à être analysé (mauvais JSON), une exception avec. un code d’état de 413 sera émis une exception 400.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée du déploiement de mysqld_multi sur une seule machine

Comment interroger différentes bases de données avec un seul SQL déclaration

JS obtient la valeur dans le premier élément de la liste déroulante de sélection

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn