पार्सिंग क्वेरी स्ट्रिंग in node.js


86

इस "हैलो वर्ल्ड" उदाहरण में:

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

मैं क्वेरी स्ट्रिंग से पैरामीटर कैसे प्राप्त कर सकता हूं?

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

प्रलेखन में, उन्होंने उल्लेख किया है:

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

लेकिन मुझे समझ नहीं आ रहा था कि इसका इस्तेमाल कैसे किया जाए। क्या कोई समझा सकता है?

जवाबों:


136

आप अनुरोध कॉलबैक में URL मॉड्यूलparse से विधि का उपयोग कर सकते हैं ।

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

मेरा सुझाव है कि कॉलबैक में आपको क्या मिलता है, इसका अंदाजा लगाने के लिए आप HTTP मॉड्यूल प्रलेखन पढ़ें createServer। तुम भी http://howtonode.org/ जैसी साइटों पर एक नज़र रखना चाहिए और नोड के साथ तेजी से शुरू करने के लिए एक्सप्रेस ढांचे की जांच करें ।


धन्यवाद, मैंने परीक्षण किया, यह काम किया। लिंक के लिए धन्यवाद। मुझे लगता है कि मुझे और जानने की जरूरत है: D
LN

यह लिंक मुझे यह महसूस करने में मदद करता है कि [t]he request object is an instance of IncomingMessage, और उसके http.IncomingMessage पास एक संपत्ति है url
ट्रीफ़िश झांग

क्या इनकमिंग मेसेज ऑब्जेक्ट से नोड परज के बजाय URL पैरामेट्स प्राप्त करने का कोई तरीका है। नोड्स
sumit_suthar

30

वहाँ भी है QueryString मॉड्यूल की parse()विधि:

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


6

node -v v9.10.1

यदि आप लॉग क्वेरी ऑब्जेक्ट को सीधे कंसोल करने का प्रयास करते हैं तो आपको त्रुटि मिलेगी TypeError: Cannot convert object to primitive value

इसलिए मैं सुझाव दूंगा 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"));

इसलिए कर curl http://localhost:3000/foo\?fizz\=buzzलौट आएगाRequest received on: /foo + method: GET + query: {"fizz":"buzz"}


1
इसे शीर्ष पर ले जाया जाना चाहिए। 2018 के अंत तक, यह उत्तर ओपी के मुद्दे को हल करता है
SeaWarrior404

4

Node.js 11 से शुरू होने वाले url.parse और के अन्य तरीकों विरासत यूआरएल एपीआई गया पदावनत के पक्ष में (केवल दस्तावेज में, पहली बार में) मानकीकृत WHATWG यूआरएल एपीआई । नया API किसी ऑब्जेक्ट में क्वेरी स्ट्रिंग को पार्स करने की पेशकश नहीं करता है। Tthe querystring.parse विधि का उपयोग करके इसे प्राप्त किया जा सकता है :

// Load modules to create an http server, parse a URL and parse a URL query.
const http = require('http');
const { URL } = require('url');
const { parse: parseQuery } = require('querystring');

// Provide the origin for relative URLs sent to Node.js requests.
const serverOrigin = 'http://localhost:8000';

// Configure our HTTP server to respond to all requests with a greeting.
const server = http.createServer((request, response) => {
  // Parse the request URL. Relative URLs require an origin explicitly.
  const url = new URL(request.url, serverOrigin);
  // Parse the URL query. The leading '?' has to be removed before this.
  const query = parseQuery(url.search.substr(1));
  response.writeHead(200, { 'Content-Type': 'text/plain' });
  response.end(`Hello, ${query.name}!\n`);
});

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

// Print a friendly message on the terminal.
console.log(`Server running at ${serverOrigin}/`);

यदि आप ऊपर स्क्रिप्ट चलाते हैं, तो आप उदाहरण के लिए सर्वर प्रतिक्रिया का परीक्षण कर सकते हैं:

curl -q http://localhost:8000/status?name=ryan
Hello, ryan!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.