Как мне понять и использовать этот сервер, написанный на Node.js? - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь понять простой сервер, написанный на node.js

var http = require('http'); 
var querystring = require('querystring'); 

http.createServer(function (req, res) { 
  switch(req.url) { 
    case '/form': 
        if (req.method == 'POST') { 
         console.log("[200] " + req.method + " to " + req.url); 
         var fullBody = ''; 
         req.on('data', function(chunk) { 
           fullBody += chunk.toString(); 
         }); 
         req.on('end', function() { 
           res.writeHead(200, "OK", {'Content-Type': 'text/html'});   
           res.write('<html><head><title>Post data</title></head><body>'); 
           res.write('<style>th, td {text-align:left; padding:5px; color:black}\n'); 
           res.write('th {background-color:grey; color:white; min-width:10em}\n'); 
           res.write('td {background-color:lightgrey}\n'); 
           res.write('caption {font-weight:bold}</style>'); 
           res.write('<table border="1"><caption>Form Data</caption>'); 
           res.write('<tr><th>Name</th><th>Value</th>'); 
           var dBody = querystring.parse(fullBody); 
           for (var prop in dBody) { 
            res.write("<tr><td>" + prop + "</td><td>" + dBody[prop] + "</td></tr>"); 
           } 
           res.write('</table></body></html>'); 
           res.end(); 
         }); 
       } else { 
         console.log("[405] " + req.method + " to " + req.url); 
         res.writeHead(405, "Method not supported", {'Content-Type': 'text/html'}); 
         res.end('<html><head><title>405 - Method not supported</title></head><body>' + 
                 '<h1>Method not supported.</h1></body></html>'); 
       } 
      break; 
    default: 
      res.writeHead(404, "Not found", {'Content-Type': 'text/html'}); 
      res.end('<html><head><title>404 - Not found</title></head><body>' + 
              '<h1>Not found.</h1></body></html>'); 
      console.log("[404] " + req.method + " to " + req.url); 
  }; 
}).listen(8080); 

Что делает функция req.on()?Например, req.on('data',...) и req.on('end',...)?Это объясняется где-то в https://nodejs.org/api/http.html? Я думаю, что, возможно, пропустил это.

Как мне отправить HTTP-запрос на сервер, чтобы выполнить часть внутри case '/form': if (req.method == 'POST'){...}?В частности, при использовании curl, какие аргументы и опции я должен дать curl?Что если использовать браузер Firefox?

1 Ответ

1 голос
/ 03 мая 2019

Req.on ('data') означает, что ваш сервер получает данные от клиента, при обратном вызове, прикрепленном к req.on ('data'), вы обычно объединяете данные, а затем анализируете данные для последующего использования.Как только он получит все данные, будет выполнен обратный вызов, прикрепленный к req.on ('end'), и здесь вы можете выполнить всю бизнес-логику на основе полученных вами данных, а затем отправить ответ обратно клиенту

теперь, как вы можете получить доступ к URL / форме?

При отправке данных с помощью запроса POST или PUT, два распространенных формата (указанных в заголовке Content-Type):

  1. application / json
  2. application / x-www-form-urlencoded

Вы можете использовать либо почтальонский клиент, либо curl для доступа к URL-адресу / form.

in curl-

curl -H "Content-Type:application/x-www-form-urlencoded" \
-d "param1=value1&param2=value2" \
http://localhost:8080/form

curl -H "Content-Type:application/json" \
-d '{"key1":"value1", "key2":"value2"}' \
http://localhost:8080/form

В своем коде вы принимаете приложение / x-www-form-urlencoded, так что следуйте первому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...