Créez facilement un serveur nodejs (10) : Gestion des requêtes POST_node.js
WBOY
Libérer: 2016-05-16 16:25:42
original
1247 Les gens l'ont consulté
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 :
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 :
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é
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 :
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 :
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