Javascript 在 node.js 中解析查询字符串
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8590042/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Parsing Query String in node.js
提问by L N
In this "Hello World" example:
在这个“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/");
How can I get the parameters from the query string?
如何从查询字符串中获取参数?
http://127.0.0.1:8000/status?name=ryan
In the documentation, they mentioned:
在文档中,他们提到:
node> require('url').parse('/status?name=ryan', true)
{ href: '/status?name=ryan'
, search: '?name=ryan'
, query: { name: 'ryan' }
, pathname: '/status'
}
But I did not understand how to use it. Could anyone explain?
但我不明白如何使用它。谁能解释一下?
回答by juandopazo
You can use the parse
method from the URL modulein the request callback.
您可以使用parse
从方法URL模块在请求回调。
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);
I suggest you read the HTTP module documentationto get an idea of what you get in the createServer
callback. You should also take a look at sites like http://howtonode.org/and checkout the Express frameworkto get started with Node faster.
我建议您阅读HTTP 模块文档以了解您在createServer
回调中得到的内容。您还应该查看诸如http://howtonode.org/ 之类的站点并查看Express 框架以更快地开始使用 Node。
回答by Brandon Hill
There's also the QueryString module's parse()
method:
还有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');
回答by Hafthor
require('url').parse('/status?name=ryan', {parseQueryString: true}).query
returns
返回
{ name: 'ryan' }
回答by STEEL
node -v
v9.10.1
node -v
v9.10.1
If you try to console log query object directly you will get error TypeError: Cannot convert object to primitive value
如果您尝试直接控制台日志查询对象,您将收到错误 TypeError: Cannot convert object to primitive value
So I would suggest use JSON.stringify
所以我建议使用 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"));
So doing curl http://localhost:3000/foo\?fizz\=buzz
will return Request received on: /foo + method: GET + query: {"fizz":"buzz"}
所以这样做curl http://localhost:3000/foo\?fizz\=buzz
会回来Request received on: /foo + method: GET + query: {"fizz":"buzz"}
回答by Ferdinand Prantl
Starting with Node.js 11, the url.parseand other methods of the Legacy URL APIwere deprecated(only in the documentation, at first) in favour of the standardizedWHATWG URL API. The new API does not offer parsing the query string into an object. That can be achieved using tthe querystring.parsemethod:
从 Node.js 11 开始,旧 URL API的url.parse和其他方法被弃用(最初仅在文档中),转而支持标准化的WHATWG URL API。新 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}/`);
If you run the script above, you can test the server response like this, for example:
如果您运行上面的脚本,您可以像这样测试服务器响应,例如:
curl -q http://localhost:8000/status?name=ryan
Hello, ryan!