2011-12-21 5 views
53

En este "Hola Mundo" ejemplo:de análisis de cadena de consulta en Node.js

// 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/"); 

¿Cómo puedo obtener los parámetros de la cadena de consulta?

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

En la documentación, se mencionan:

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

pero no entienden cómo usarlo. ¿Alguien podría explicar?

Gracias de antemano

Respuesta

87

Se puede utilizar el método de la parseURL module en la solicitud de devolución de llamada.

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); 

le sugiero que lea el HTTP module documentation para tener una idea de lo que se obtiene en el createServer de devolución de llamada. También debe echar un vistazo a sitios como http://howtonode.org/ y pagar Express framework para comenzar con el nodo más rápido.

+0

Gracias, probé, funcionó. Gracias por los enlaces. Supongo que necesito aprender más: D –

+0

mejor consejo; gracias :) – gdibble

+0

[Este enlace] (https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/) me ayuda a darme cuenta de que '[t] o el objeto de solicitud es una instancia de IncomingMessage', y ese 'http.IncomingMessage' [tiene una propiedad] (https://nodejs.org/api/http.html)' url'. –

17

También existe la QueryString module 's parse() método:

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');