Maison  >  Article  >  interface Web  >  Comment implémenter la fonction de routage dans nodejs

Comment implémenter la fonction de routage dans nodejs

不言
不言original
2018-06-30 16:00:111611parcourir

Cet article présente principalement l'implémentation de la fonction de routage dans nodejs. Comme son nom l'indique, le routage signifie que nous avons différentes méthodes de traitement pour différentes URL. Cet article vous apprendra à implémenter la fonction de routage dans node.js. can Pour référence,

Je suis nouveau sur Node et j'ai découvert une situation complètement différente de mes vues précédentes - à quoi sert JavaScript à vos yeux ? Effets spéciaux? ou simplement une interaction avec le client ? On peut dire que JavaScript a été exécuté pour la première fois dans le navigateur. Cependant, si vous y réfléchissez de cette façon, le navigateur vous fournit simplement un contexte (contexte) qui définit ce qui peut être fait en utilisant JavaScript. entreprise similaire. Il définit ce que vous pouvez faire ici, mais ne dit pas grand-chose sur ce que le langage JavaScript lui-même peut faire. En fait, en tant que langage complet, JavaScript peut être utilisé dans différents contextes et refléter différentes capacités. Les Nodejs mentionnés ici fournissent en fait un contexte, un environnement d'exécution, qui permet d'exécuter du code JavaScript sur le backend (hors de l'environnement du navigateur).

Le cœur de la sélection de routage est le routage. Comme son nom l'indique, le routage signifie que nous avons différentes méthodes de traitement pour différentes URL, telles que le traitement de la logique métier de /start et le traitement des activités du module /upload ; la logique est incohérente. Dans une implémentation réaliste, le processus de routage "se terminera" dans le module de routage, et le module de routage n'est pas le module qui "agit" réellement sur la demande, sinon il ne sera pas disponible lorsque notre application deviendra plus complexe. .

Ici, nous créons d'abord un module appelé requestHandlers, et ajoutons une fonction d'espace réservé à chaque gestionnaire de requêtes :

function start(){   
    console.log("Request handler 'start' was called.");   
       
    function sleep(milliSeconds){   
        var startTime=new Date().getTime();   
        while(new Date().getTime()<startTime+milliSeconds);   
    }   
    sleep(10000);   
    return "Hello Start";   
}   
function upload(){   
    console.log("Request handler &#39;upload&#39; was called.");   
    return "Hello Upload";   
}   
  
exports.start=start;   
exports.upload=upload;

Pour que nous puissions connecter le gestionnaire de requêtes au module de routage Levez-vous et laissez l'itinéraire a un chemin à suivre. Après cela, nous avons décidé de transmettre une série de gestionnaires de requêtes via un objet, et nous devons utiliser une méthode de couplage lâche pour injecter cet objet dans la fonction router(). Le fichier principal index.js :

var server=require("./server");   
var router=require("./router");   
var requestHandlers=require("./requestHandlers");   
  
var handle={};   
handle["/"]=requestHandlers.start;   
handle["/start"]=requestHandlers.start;   
handle["/upload"]=requestHandlers.upload;   
  
server.start(router.route,handle);
<.> comme ci-dessus Comme indiqué, mapper différentes URL vers le même gestionnaire de requêtes est simple : il suffit d'ajouter une propriété avec la clé "/" à l'objet correspondant à requestHandlers.start. De cette façon, nous pouvons simplement configurer que les requêtes pour /start et / soient gérées par le gestionnaire de démarrage. Après avoir terminé la définition de l'objet, nous le transmettons au serveur comme paramètre supplémentaire, voir server.js :

var http=require("http");   
var url=require("url");   
  
function start(route,handle){   
    function onRequest(request,response){   
        var pathname=url.parse(request.url).pathname;   
        console.log("Request for "+pathname+" received.");   
           
        route(handle,pathname);   
           
        response.writeHead(200,{"Content-Type":"text/plain"});   
        var content=route(handle,pathname);   
        response.write(content);   
        response.end();   
    }   
    http.createServer(onRequest).listen(8888);   
    console.log("Server has started.");   
}    
exports.start=start;
De cette façon, le paramètre handle est ajouté à la fonction start(), et l'objet handle est Comme premier paramètre passé à la fonction de rappel route(), route.js est défini ci-dessous :

function route(handle,pathname){  
    console.log("About to route a request for "+ pathname);   
    if(typeof handle[pathname]===&#39;function‘){   
        return handle[pathname]();   
    }else{   
        console.log("No request handler found for "+pathname);   
        return "404 Not Found";   
    }   
}   
exports.route=route;
Avec le code ci-dessus, on vérifie d'abord si le gestionnaire de requêtes correspond au chemin donné existe, et s'il existe Alors appelez directement la fonction correspondante. Nous pouvons obtenir la fonction de traitement des requêtes de l'objet transmis de la même manière que nous obtenons des éléments du tableau associatif, c'est-à-dire que handle[pathname](); une telle expression donne aux gens le sentiment de dire "Bonjour, s'il vous plaît, venez m'aider". gérer ce chemin." L'effet courant du programme est le suivant :

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun . Veuillez consulter plus de contenu connexe. Suivez le site Web PHP chinois !

Recommandations associées :

Comment utiliser rapidement node.js pour le développement web

Analyse du module Http de Nodejs

Comment résoudre le problème de chemin nodejs

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