Heim  >  Artikel  >  Web-Frontend  >  Die NodeJS-Anfrage gibt JSON-Daten zurück

Die NodeJS-Anfrage gibt JSON-Daten zurück

王林
王林Original
2023-05-08 18:48:071646Durchsuche

Node.js ist eine sehr beliebte serverseitige JavaScript-Laufzeitumgebung. Es ist ein leistungsstarkes Tool zum Erstellen leistungsstarker Webanwendungen. HTTP-Anfragen sind unerlässlich, wenn Sie Daten von einer API-Funktion sammeln müssen. Da die meisten modernen APIs Daten im JSON-Format zurückgeben, ist die Handhabung der Anforderung und Rückgabe von JSON-Daten eine sehr wichtige Aufgabe in Node.js.

In Node.js können wir das integrierte http-Modul verwenden, um HTTP-Anfragen zu stellen. Sie können Daten vom Remote-Server abrufen, indem Sie eine HTTP-Anfrage senden und diese in Daten im JSON-Format analysieren. Das Folgende ist ein Beispiel für das Erstellen einer HTTP-Anfrage und den Empfang einer JSON-Antwort mit Node.js: http模块进行HTTP请求。你可以通过发送HTTP请求从远程服务端获取数据并将其解析为JSON格式数据。以下是一个使用Node.js发出HTTP请求并接收JSON响应的例子:

const https = require('https');

const options = {
    hostname: 'api.example.com',
    port: 443,
    path: '/data',
    method: 'GET'
};

const req = https.request(options, res => {
    console.log(`statusCode: ${res.statusCode}`);

    let data = '';

    res.on('data', d => {
        data += d;
    });

    res.on('end', () => {
        const json = JSON.parse(data);
        console.log(json);
    });
});

req.on('error', error => {
    console.error(error);
});

req.end();

在上面的例子中,https模块提供了一个request()函数,在该函数中我们传递一个options对象作为参数。该对象包含hostname,端口,请求路径和请求方法等信息。request()函数返回一个http.ClientRequest对象,我们可以调用该对象的end()方法来发送请求。

当远程服务端响应请求时,我们可以监听该响应的“data”事件并将数据添加到缓冲区中。当响应完成时,我们可以使用JSON.parse()函数将缓冲区中的数据解析为JSON格式数据。

在处理API响应时,我们需要确保HTTP响应的状态码为200。但这并不是唯一需要处理的状态码,还有其他的常见状态码:

  • 404(Not Found):请求的资源不存在
  • 401 (Unauthorized):需要用户提供合法的身份证明
  • 500(Internal Server Error):服务端遇到了一个不可预知的错误

我们也需要处理这些状态码。例如,当请求返回404响应码时,我们可以向用户发送一条类似“资源未找到”的消息。

const https = require('https');

const options = {
    hostname: 'api.example.com',
    port: 443,
    path: '/data',
    method: 'GET'
};

const req = https.request(options, res => {
    let data = '';

    res.on('data', d => {
        data += d;
    });

    res.on('end', () => {
        const json = JSON.parse(data);
        console.log(json);
    });
});

req.on('error', error => {
    console.error(error);
});

req.end();

以上例子,我们忽略了HTTP响应状态码。虽然这很方便,但很不安全。如果服务端返回了错误状态码,我们可能需要知晓导致错误的原因。为了实现这个目标,我们需要在request()函数的回调中检查响应状态码。如果状态码不是200,我们可以使用res.statusMessage字段来获取响应状态消息:

const https = require('https');

const options = {
    hostname: 'api.example.com',
    port: 443,
    path: '/data',
    method: 'GET'
};

const req = https.request(options, res => {
    if (res.statusCode !== 200) {
        console.error(`请求失败: ${res.statusMessage}`);
        res.resume();
        return;
    }

    let data = '';

    res.on('data', d => {
        data += d;
    });

    res.on('end', () => {
        const json = JSON.parse(data);
        console.log(json);
    });
});

req.on('error', error => {
    console.error(error);
});

req.end();

在上述代码中,我们在HTTP响应状态码不是200时打印出错误消息。如果遇到错误,我们调用res.resume()方法来清除缓存,并在处理数据结束时结束响应。如果你遇到不是由你的代码引起的请求错误,有时候调用res.resume()rrreee

Im obigen Beispiel stellt das https-Modul einen request() bereit Funktion: In dieser Funktion übergeben wir ein options-Objekt als Parameter. Dieses Objekt enthält Informationen wie Hostname, Port, Anforderungspfad und Anforderungsmethode. Die Funktion request() gibt ein Objekt http.ClientRequest zurück, und wir können die Methode end() des Objekts aufrufen, um die Anfrage zu senden.

Wenn der Remote-Server auf die Anfrage antwortet, können wir das „Daten“-Ereignis der Antwort abhören und die Daten zum Puffer hinzufügen. Wenn die Antwort abgeschlossen ist, können wir die Funktion JSON.parse() verwenden, um die Daten im Puffer in Daten im JSON-Format zu analysieren.

Bei der Verarbeitung von API-Antworten müssen wir sicherstellen, dass die HTTP-Antwort den Statuscode 200 hat. Dies ist jedoch nicht der einzige Statuscode, der behandelt werden muss, es gibt auch andere häufige Statuscodes: 🎜
  • 404 (Nicht gefunden): Die angeforderte Ressource existiert nicht
  • 401 (Nicht autorisiert ): Erforderlich Der Benutzer gibt einen gültigen Ausweis an
  • 500 (Interner Serverfehler): Der Server ist auf einen unvorhersehbaren Fehler gestoßen
🎜Wir müssen auch diese Statuscodes verarbeiten. Wenn eine Anfrage beispielsweise den Antwortcode 404 zurückgibt, können wir dem Benutzer eine Nachricht wie „Ressource nicht gefunden“ senden. 🎜rrreee🎜Im obigen Beispiel haben wir den HTTP-Antwortstatuscode ignoriert. Das ist zwar praktisch, aber sehr unsicher. Wenn der Server einen Fehlerstatuscode zurückgibt, müssen wir möglicherweise die Fehlerursache kennen. Um dieses Ziel zu erreichen, müssen wir den Antwortstatuscode im Rückruf der Funktion request() überprüfen. Wenn der Statuscode nicht 200 ist, können wir das Feld res.statusMessage verwenden, um die Antwortstatusmeldung abzurufen: 🎜rrreee🎜 Im obigen Code drucken wir die Fehlermeldung aus, wenn der HTTP-Antwortstatuscode angezeigt wird ist nicht 200. Wenn ein Fehler auftritt, rufen wir die Methode res.resume() auf, um den Cache zu leeren und die Antwort zu beenden, wenn die Verarbeitung der Daten abgeschlossen ist. Wenn Sie auf Anforderungsfehler stoßen, die nicht durch Ihren Code verursacht werden, ist es manchmal sinnvoll, die Methode res.resume() aufzurufen. 🎜🎜Zusammenfassung🎜🎜Das Anfordern und Parsen von JSON-Daten in Node.js ist sehr einfach. Das integrierte HTTP-Modul bietet eine Anforderungsfunktion. Mit dieser Funktion können wir HTTP-Anfragen senden und Json-Antworten in Node.js-Programmen empfangen. Mit dem obigen Code können wir die API-Endpunktdaten abrufen und die Daten im JSON-Format einfach analysieren. Wir müssen jedoch auf einige Ausnahmen achten, z. B. wenn der Statuscode der HTTP-Antwort nicht 200 ist und andere HTTP-Anforderungsfehler vorliegen. Mit vollständiger Fehlerbehandlung können wir unseren Code robuster machen. 🎜

Das obige ist der detaillierte Inhalt vonDie NodeJS-Anfrage gibt JSON-Daten zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn