Maison  >  Article  >  interface Web  >  La requête nodejs renvoie des données json

La requête nodejs renvoie des données json

王林
王林original
2023-05-08 18:48:071600parcourir

Node.js est un environnement d'exécution JavaScript côté serveur très populaire. Il s'agit d'un outil puissant pour créer des applications Web hautes performances. Les requêtes HTTP sont essentielles lorsque vous devez collecter des données à partir d'une fonction API. Étant donné que la plupart des API modernes renvoient des données au format JSON, la gestion de la demande et du renvoi des données JSON est une tâche très importante dans Node.js.

Dans Node.js, nous pouvons utiliser le module http intégré pour effectuer des requêtes HTTP. Vous pouvez obtenir des données du serveur distant en envoyant une requête HTTP et en les analysant au format JSON. Voici un exemple de création d'une requête HTTP et de réception d'une réponse JSON à l'aide de 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

Dans l'exemple ci-dessus, le module https fournit une requête () Fonction , dans laquelle on passe un objet options en paramètre. Cet objet contient des informations telles que le nom d'hôte, le port, le chemin de la requête et la méthode de la requête. La fonction request() renvoie un objet http.ClientRequest, et nous pouvons appeler la méthode end() de l'objet pour envoyer la requête.

Lorsque le serveur distant répond à une requête, nous pouvons écouter l'événement "data" de la réponse et ajouter les données au tampon. Lorsque la réponse est terminée, nous pouvons utiliser la fonction JSON.parse() pour analyser les données du tampon au format JSON.

Lors du traitement de la réponse API, nous devons nous assurer que le code d'état de la réponse HTTP est 200. Mais ce n'est pas le seul code d'état à gérer, il existe d'autres codes d'état courants : #🎜🎜#
  • 404 (Not Found) : La ressource demandée n'existe pas
  • 401 (Non autorisé) : L'utilisateur doit fournir une identification légale
  • 500 (Erreur interne du serveur) : Le serveur a rencontré une erreur imprévisible
#🎜🎜#Nous devons également gérer ces codes de statuts. Par exemple, lorsqu'une requête renvoie un code de réponse 404, nous pouvons envoyer un message du type « Ressource introuvable » à l'utilisateur. #🎜🎜#rrreee#🎜🎜#Dans l'exemple ci-dessus, nous avons ignoré le code d'état de la réponse HTTP. Bien que cela soit pratique, cela s’avère très dangereux. Si le serveur renvoie un code d'état d'erreur, nous devrons peut-être connaître la cause de l'erreur. Afin d'atteindre cet objectif, nous devons vérifier le code d'état de la réponse dans le rappel de la fonction request(). Si le code d'état n'est pas 200, nous pouvons utiliser le champ res.statusMessage pour obtenir le message d'état de la réponse : #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous imprimons lorsque la réponse HTTP le code d'état n'est pas 200. Un message d'erreur apparaît. Si une erreur est rencontrée, nous appelons la méthode res.resume() pour vider le cache et mettre fin à la réponse une fois le traitement des données terminé. Si vous rencontrez des erreurs de requête qui ne sont pas causées par votre code, il est parfois utile d'appeler la méthode res.resume(). #🎜🎜##🎜🎜#Summary#🎜🎜##🎜🎜#Demander et analyser des données JSON dans Node.js est très simple. Le module HTTP intégré fournit une fonction de requête. En utilisant cette fonction, nous pouvons envoyer des requêtes HTTP et recevoir des réponses Json dans les programmes Node.js. En utilisant le code ci-dessus, nous pouvons obtenir les données du point de terminaison de l'API et analyser facilement les données au format JSON. Cependant, nous devons prêter attention à certaines situations anormales, telles que le code d'état de la réponse HTTP n'est pas 200 et d'autres erreurs de requête HTTP. Avec une gestion complète des erreurs, nous pouvons rendre notre code plus robuste. #🎜🎜#

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