2011-12-21 34 views
53

Trong "Hello World" ví dụ này:Parsing Query String trong 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/"); 

Làm thế nào tôi có thể nhận được các thông số từ chuỗi truy vấn?

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

Trong tài liệu hướng dẫn, họ đề cập:

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

Nhưng tôi không hiểu làm thế nào để sử dụng nó. Bất cứ ai có thể giải thích?

Cảm ơn trước

Trả lời

87

Bạn có thể sử dụng phương pháp parse từ URL module trong callback yêu cầu.

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

tôi đề nghị bạn đọc HTTP module documentation để có được một ý tưởng về những gì bạn nhận được trong createServer gọi lại. Bạn cũng nên xem các trang web như http://howtonode.org/ và thanh toán số Express framework để bắt đầu với Nút nhanh hơn.

+0

Cảm ơn bạn, tôi thử nghiệm, nó làm việc. Cảm ơn các liên kết. Đoán rằng tôi cần phải tìm hiểu thêm: D –

+0

mẹo hay nhất; thanks :) – gdibble

+0

[Liên kết này] (https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/) giúp tôi nhận ra rằng '[t] anh ta yêu cầu đối tượng là một thể hiện của IncomingMessage' và 'http.IncomingMessage' [có thuộc tính] (https://nodejs.org/api/http.html)' url'. –

17

Ngoài ra còn có parse() phương pháp 's QueryString module:

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