Maison >interface Web >js tutoriel >Créez facilement un serveur nodejs (10) : Gestion des requêtes POST_node.js

Créez facilement un serveur nodejs (10) : Gestion des requêtes POST_node.js

WBOY
WBOYoriginal
2016-05-16 16:25:421251parcourir

Jusqu'à présent, le serveur que nous avons construit n'a aucune utilité pratique. Ensuite, nous commencerons à implémenter certaines fonctions réellement utiles.

Ce que nous voulons faire, c'est : l'utilisateur sélectionne un fichier, télécharge le fichier, puis voit le fichier téléchargé dans le navigateur.

Nous avons d'abord besoin d'une zone de texte permettant aux utilisateurs de saisir du contenu, puis de le soumettre au serveur via une requête POST.

Nous ajoutons du code dans le gestionnaire d'événements de démarrage et modifions requestHandlers.js comme suit :

Copier le code Le code est le suivant :

fonction start(réponse) {
console.log("Le gestionnaire de requêtes 'start' a été appelé.");
var corps = '' '' '
'
'
''
'

'
'
''
''
'';
réponse.writeHead(200, {"Content-Type": "text/html"});
réponse.write(body);
réponse.end();
>
fonction télécharger (réponse) {
console.log("Le gestionnaire de requêtes 'upload' a été appelé.");
réponse.writeHead(200, {"Content-Type": "text/plain"});
réponse.write("Bonjour le téléchargement");
réponse.end();
>
exports.start = start;
exports.upload = télécharger;

Vous pouvez voir l'effet en visitant http://localhost:8888/start dans votre navigateur.

Ensuite, nous devons implémenter le gestionnaire de requêtes /upload pour déclencher la requête POST lorsque l'utilisateur soumet le formulaire.

Afin de rendre l'ensemble du processus non bloquant, Node.js divisera les données POST en plusieurs petits morceaux de données, puis transmettra ces petits morceaux de données à la fonction de rappel en déclenchant des événements spécifiques. Les événements spécifiques ici incluent l'événement de données (indiquant qu'un nouveau petit bloc de données est arrivé) et l'événement de fin (indiquant que toutes les données ont été reçues).

Nous faisons cela en enregistrant un auditeur sur l'objet de la requête. L'objet de requête ici est transmis à la fonction de rappel onRequest chaque fois qu'une requête HTTP est reçue.

Nous mettons le code dans le serveur, et modifions server.js comme suit :

Copier le code Le code est le suivant :
var http = require("http");
var url = require("url");
fonction start(route, handle) {
function onRequest (demande, réponse) {
var postData = "";
var chemin d'accès = url.parse(request.url).chemin d'accès;
console.log("Demande de " chemin d'accès " reçue.");
request.setEncoding("utf8");
request.addListener("data", function(postDataChunk) {
PostData = postDataChunk;
console.log("Particule de données POST reçue '" postDataChunk "'.");
});
request.addListener("end", function() {
route(handle, chemin, réponse, postData);
});
>
http.createServer(onRequest).listen(8888);
console.log("Le serveur a démarré.");
>
exports.start = start;

Le code ci-dessus fait trois choses : tout d'abord, nous définissons le format d'encodage des données reçues sur UTF-8, puis enregistrons un écouteur pour l'événement "data" afin de collecter chaque nouveau bloc de données reçu, et l'attribuons au variable postData. Enfin, nous déplaçons l'appel de routage de requête dans le gestionnaire d'événement de fin pour nous assurer qu'il ne se déclenche que lorsque toutes les données ont été reçues, et une seule fois. Nous transmettons également les données POST au routeur de requêtes, car ces données seront utilisées par le gestionnaire de requêtes.

Ensuite, sur la page /upload, le contenu saisi par l'utilisateur est affiché

Changeons router.js :

Copier le code Le code est le suivant :

function route (handle, chemin, réponse, postData) {
console.log("Sur le point d'acheminer une requête pour " pathname);
if (typeof handle[pathname] === 'function') {
handle[pathname](response, postData);
} autre {
console.log("Aucun gestionnaire de requêtes trouvé pour " pathname);
réponse.writeHead(404, {"Content-Type": "text/plain"});
réponse.write("404 Non trouvé");
réponse.end();
>
>
exports.route = route;

Ensuite, dans requestHandlers.js, nous incluons les données dans la réponse à la demande de téléchargement :

Copier le code Le code est le suivant :

function start (réponse, postData) {
console.log("Le gestionnaire de requêtes 'start' a été appelé.");
var corps = ''
''
'
'
'
''
'
'
'
''
'
'
'';
réponse.writeHead(200, {"Content-Type": "text/html"});
réponse.write(body);
réponse.end();
>
fonction télécharger (réponse, postData) {
console.log("Le gestionnaire de requêtes 'upload' a été appelé.");
réponse.writeHead(200, {"Content-Type": "text/plain"});
réponse.write("Vous avez envoyé : " postData);
réponse.end();
>
exports.start = start;
exports.upload = télécharger;

La dernière chose que nous devons faire est la suivante : actuellement, nous transmettons l'intégralité du corps du message de la requête à la route de la requête et au gestionnaire de requête. Nous ne devons transmettre que les parties des données POST qui nous intéressent à la route de requête et au gestionnaire de requête. Dans notre exemple, nous ne nous intéressons en réalité qu’au champ de texte.

Nous pouvons utiliser le module querystring introduit précédemment :

Copier le code Le code est le suivant :

var querystring = require("querystring");
function start (réponse, postData) {
console.log("Le gestionnaire de requêtes 'start' a été appelé.");
var corps = ''
''
'
'
'
''
'
'
'
''
'
'
'';
réponse.writeHead(200, {"Content-Type": "text/html"});
réponse.write(body);
réponse.end();
>
fonction télécharger (réponse, postData) {
console.log("Le gestionnaire de requêtes 'upload' a été appelé.");
réponse.writeHead(200, {"Content-Type": "text/plain"});
réponse.write("Vous avez envoyé le texte : " querystring.parse(postData).text);
réponse.end();
>
exports.start = start;
exports.upload = télécharger;

D'accord, il s'agit uniquement du traitement des données POST.

Dans la section suivante, nous implémenterons la fonction de téléchargement d'images.

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