Dieses Mal erkläre ich Ihnen, was die Vorsichtsmaßnahmen sind. Hier ist ein praktischer Fall, werfen wir einen Blick darauf.
Dieses Mal zeige ich Ihnen, wie Sie HTTP-Parameter in Egg.js erhalten und welche Vorsichtsmaßnahmen zum Abrufen von HTTP-Parametern in Egg.js gelten. Das Folgende ist ein praktischer Fall, schauen wir uns das an.
Da im Egg.js-Framework der Controller im Grunde der einzige Ort ist, der in der Geschäftsentwicklung mit dem HTTP-Protokoll interagiert, bietet das Framework viele praktische Methoden und Eigenschaften, um Benutzer über die an den Controller gebundene Kontextinstanz zu erhalten . Über HTTP-Anfragen gesendete Parameter. In diesem Artikel wird die Methode zum Abrufen von HTTP-Anforderungsparametern zusammengefasst:
1.query
In der URL ist der folgende Teil eine Abfragezeichenfolge, die häufig für Anforderungen vom Typ GET verwendet wird. Übergeben Sie Parameter. Beispielsweise ist in GET /search?name=egg&age=26 name=egg&age=26 der vom Benutzer übergebene Parameter. Wir können den analysierten Parameterkörper über context.query (das ein Objekt ist) erhalten.
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; };
Wenn der Schlüssel in der Abfragezeichenfolge wiederholt wird, nimmt context.query nur den Wert an, wenn der Schlüssel zum ersten Mal erscheint , nachfolgende Vorkommnisse werden ignoriert. GET /posts?category=egg&category=koa Der über context.query erhaltene Wert ist { Kategorie: 'Ei' }.
1.1 Abfragen
Manchmal ist unser System so konzipiert, dass Benutzer denselben Schlüssel übergeben können, z. B. GET /posts?category=egg&id=1&id=2&id=3. Für solche Situationen stellt das Framework das context.queries-Objekt bereit, das auch den Abfragestring analysiert, aber keine doppelten Daten verwirft, sondern sie alle in ein Array einfügt:
// 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' ], // } } };
Wenn alle Schlüssel aktiviert sind context.queries haben Werte, sie müssen Array-Typen sein.
2. Router-Parameter
Wir wissen, dass Parameter auch auf dem Router deklariert werden können und diese Parameter über context.params abgerufen werden können.
// 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. Körper
Obwohl wir Parameter über die URL übergeben können, gibt es immer noch viele Einschränkungen:
Der Browser unterliegt Einschränkungen hinsichtlich der Länge der URL . Wenn zu viele Parameter übergeben werden müssen, werden diese nicht übergeben.
Der Server zeichnet häufig die vollständige URL auf, auf die in der Protokolldatei zugegriffen wird. Einige sensible Daten sind bei der Weitergabe über die URL nicht sicher.
Wir wissen, dass es nach dem Header einen Körperteil gibt, und wir übergeben in diesem Teil normalerweise die Parameter von Methoden wie POST, PUT und DELETE. Wenn die Anforderung einen Hauptteil enthält, sendet der Client (Browser) im Allgemeinen auch Content-Type, um dem Server mitzuteilen, welches Format der Hauptteil dieser Anforderung hat. Die beiden am häufigsten verwendeten Formate für die Datenübertragung in der Webentwicklung sind JSON und Form.
Das Framework verfügt über eine integrierte BodyParser-Middleware, um den Anforderungstext dieser beiden Formattypen in Objekt zu analysieren und auf context.request.body bereitzustellen. Im HTTP-Protokoll wird nicht empfohlen, den Text beim Zugriff über die Methoden GET und HEAD zu übergeben, sodass wir den Inhalt in den Methoden GET und HEAD mit dieser Methode nicht abrufen können.
// 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'); } };
Das Framework legt einige Standardparameter für bodyParser fest. Nach der Konfiguration weist es die folgenden Eigenschaften auf:
Wenn der angeforderte Inhaltstyp application/json ist, application/json-patch+ json: Bei Verwendung von application/vnd.api+json und application/csp-report wird der Anforderungstext gemäß dem JSON-Format analysiert und die maximale Länge des Textkörpers ist auf 100 KB begrenzt.
Wenn der Inhaltstyp der Anfrage application/x-www-form-urlencoded ist, wird der Anfragetext entsprechend dem Formularformat geparst und die maximale Länge des Textes wird auf 100 KB begrenzt.
Bei erfolgreicher Analyse muss der Körper ein Objekt (vielleicht ein Array) sein.
Im Allgemeinen besteht das am häufigsten angepasste Konfigurationselement darin, die maximal zulässige Länge beim Parsen zu ändern. Sie können den Standardwert des Frameworks in config/config.default.js überschreiben
module.exports = { bodyParser: { jsonLimit: '1mb', formLimit: '1mb', }, };
Wenn der Anforderungstext des Benutzers die maximale Länge unserer konfigurierten Analyse überschreitet, wird eine Ausnahme mit dem Statuscode von 413 ausgelöst. Wenn der angeforderte Text des Benutzers nicht analysiert werden kann (falscher JSON), wird eine Ausnahme mit ausgelöst Es wird ein Statuscode von 413 ausgelöst.
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!
Empfohlene Lektüre:
Detaillierte Erklärung der mysqld_multi-Bereitstellung auf einem einzelnen Computer
So fragen Sie verschiedene Datenbanken mit einem SQL ab Anweisung
JS ruft den Wert im ersten Element im Auswahl-Dropdown-Feld ab
Das obige ist der detaillierte Inhalt vonSo erhalten Sie HTTP-Parameter in Egg.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!