web-dev-qa-db-fra.com

Analyse de la chaîne de requête dans node.js

Dans cet exemple "Hello World":

// Load the http module to create an http server.
var http = require('http');

// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.end("Hello World\n");
});

// Listen on port 8000, IP defaults to 127.0.0.1
server.listen(8000);

// Put a friendly message on the terminal
console.log("Server running at http://127.0.0.1:8000/");

Comment puis-je obtenir les paramètres de la chaîne de requête?

http://127.0.0.1:8000/status?name=ryan

Dans la documentation, ils ont mentionné:

node> require('url').parse('/status?name=ryan', true)
{ href: '/status?name=ryan'
, search: '?name=ryan'
, query: { name: 'ryan' }
, pathname: '/status'
}

Mais je n'ai pas compris comment l'utiliser. Quelqu'un pourrait-il expliquer?

Merci d'avance

66
L N

Vous pouvez utiliser la méthode parse à partir du module URL dans le rappel de demande. 

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

// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (request, response) {
  var queryData = url.parse(request.url, true).query;
  response.writeHead(200, {"Content-Type": "text/plain"});

  if (queryData.name) {
    // user told us their name in the GET request, ex: http://Host:8000/?name=Tom
    response.end('Hello ' + queryData.name + '\n');

  } else {
    response.end("Hello World\n");
  }
});

// Listen on port 8000, IP defaults to 127.0.0.1
server.listen(8000);

Je vous suggère de lire la documentation du module HTTP pour avoir une idée de ce que vous obtenez dans le rappel createServer. Vous devriez également consulter des sites tels que http://howtonode.org/ et consulter le framework Express pour démarrer plus rapidement avec Node.

110
juandopazo

Il existe également la méthode parse() de module QueryString

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

http.createServer(function (oRequest, oResponse) {

    var oQueryParams;

    // get query params as object
    if (oRequest.url.indexOf('?') >= 0) {
        oQueryParams = queryString.parse(oRequest.url.replace(/^.*\?/, ''));

        // do stuff
        console.log(oQueryParams);
    }

    oResponse.writeHead(200, {'Content-Type': 'text/plain'});
    oResponse.end('Hello world.');

}).listen(1337, '127.0.0.1');
23
Brandon Hill

node -v v9.10.1

Si vous essayez de console directement l’objet de requête du journal, vous obtiendrez l’erreur TypeError: Cannot convert object to primitive value

Je suggère donc d'utiliser JSON.stringify

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
    const parsedUrl = url.parse(req.url, true);

    const path = parsedUrl.pathname, query = parsedUrl.query;
    const method = req.method;

    res.end("hello world\n");

    console.log(`Request received on: ${path} + method: ${method} + query: 
    ${JSON.stringify(query)}`);
    console.log('query: ', query);
  });


  server.listen(3000, () => console.log("Server running at port 3000"));

Donc, curl http://localhost:3000/foo\?fizz\=buzz retournera Request received on: /foo + method: GET + query: {"fizz":"buzz"}

3
STEEL
require('url').parse('/status?name=ryan', {parseQueryString: true}).query

résultats

{ name: 'ryan' }

ref: https://nodejs.org/api/url.html#url_urlobject_query

0
Hafthor