$_GET
PHP 에서와 마찬가지로 Node.js의 쿼리 문자열에서 변수를 얻을 수 있습니까?
Node.js에서 요청의 URL을 얻을 수 있음을 알고 있습니다. 쿼리 문자열 매개 변수를 얻는 방법이 있습니까?
$_GET
PHP 에서와 마찬가지로 Node.js의 쿼리 문자열에서 변수를 얻을 수 있습니까?
Node.js에서 요청의 URL을 얻을 수 있음을 알고 있습니다. 쿼리 문자열 매개 변수를 얻는 방법이 있습니까?
답변:
Express에서는 이미 완료되었으며 req.query 를 간단히 사용할 수 있습니다 .
var id = req.query.id; // $_GET["id"]
그렇지 않으면 NodeJS에서 req.url 및 내장 url
모듈에 [url.parse] ( https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost )에 수동으로 액세스 할 수 있습니다.
var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
req.query
req.query
또는 req.param
(다음과는 다릅니다 req.params
... 사용)
request
있으며 Express와 관련이 없습니다. 아래 @whitequark의 답변을 참조하십시오 (use request.query
)
태그에 Express.js를 언급 했으므로 다음과 같은 특급 답변이 있습니다 : use req.query . 예 :
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('id: ' + req.query.id);
});
app.listen(3000);
req.query.id
괄호 표기법을 사용할 필요가 없다는 것을 언급 할 가치가 있습니다 .
Express에서는 req.query
.
req.params
쿼리 문자열 매개 변수가 아닌 경로 매개 변수 만 가져옵니다. 특급 또는 항해 문서를 참조하십시오 .
(req.params) 경로 매개 변수를 확인합니다 (예 : / user / : id).
(req.query) 쿼리 문자열 매개 변수를 확인합니다. 예 :? id = 12 urlencoded body params를 확인합니다.
(req.body), 예 : id = 12 urlencoded 요청 본문을 활용하려면 req.body가 객체 여야합니다. _express.bodyParser 미들웨어를 사용하여 수행 할 수 있습니다.
즉, 대부분의 경우 소스에 관계없이 매개 변수의 값을 얻으려고합니다. 이 경우을 사용하십시오 req.param('foo')
.
변수가 경로 매개 변수, 쿼리 문자열 또는 인코딩 된 요청 본문에 있는지 여부에 따라 매개 변수 값이 리턴됩니다.
참고 사항-세 가지 유형의 요청 매개 변수 (PHP와 유사)의 교차를 얻으려면 매개 변수 $_REQUEST
를 병합하면됩니다. 여기 에서 Sails에서 설정 하는 방법이 있습니다. 경로 / 경로 매개 변수 객체 ( req.params
)에는 배열 속성이 있으므로 순서가 중요합니다 ( Express 4에서는 변경 될 수 있음 )
req.params
세일즈 문서 : sailsjs.org/#/documentation/reference/req/req.params.html 및 새로운 특급 문서 : expressjs.com/4x/api.html#req.params
req.param()
했으며 Express 5에서 도우미 기능이 완전히 제거 될 가능성이 높습니다. 그때까지이 대답. 그 동안 : req.param()
Express <= 3.x / Sails <= 0.12 및 더 이상 사용되지 않는 Express 4 릴리스 (사용 중단 로그 메시지 포함) 와 함께 사용 하는 것이 안전 합니다. (Sails 사용자의 경우 : req.param()
Sails v1.0부터 구현이 코어로 이동하고 앞으로 Sails에서 계속 지원 될 것입니다.)
Express.js의 경우 다음을 수행하십시오 req.params
.
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
다른 답변에서 배우고 내 사이트 전체 에서이 코드를 사용하기로 결정했습니다.
var query = require('url').parse(req.url,true).query;
그럼 당신은 전화 할 수 있습니다
var id = query.id;
var option = query.option;
get의 URL은
/path/filename?id=123&option=456
parse
에 req.url
객체로 변환합니다.
ES6 및 Express를 사용하는 경우 다음 destructuring
방법을 시도하십시오 .
const {id, since, fields, anotherField} = request.query;
문맥:
const express = require('express');
const app = express();
app.get('/', function(req, res){
const {id, since, fields, anotherField} = req.query;
});
app.listen(3000);
다음과 함께 기본값을 사용할 수도 있습니다 destructuring
.
// sample request for testing
const req = {
query: {
id: '123',
fields: ['a', 'b', 'c']
}
}
const {
id,
since = new Date().toString(),
fields = ['x'],
anotherField = 'default'
} = req.query;
console.log(id, since, fields, anotherField)
GET 메소드를 통해 매개 변수를 전달하는 방법은 두 가지가 있습니다.
방법 1 : / routename / : paramname과 같은 매개 변수를 전달하는 MVC 방식
이 경우 req.params.paramname을 사용하여 매개 변수 값을 얻을 수 있습니다. 매개 변수
링크 로 ID를 기대할 수 있습니다 : http://myhost.com/items/23
var express = require('express');
var app = express();
app.get("items/:id", function(req, res) {
var id = req.params.id;
//further operations to perform
});
app.listen(3000);
방법 2 : 일반적인 접근법 : '?'를 사용하여 변수를 쿼리 문자열로 전달 연산자
예를 들어 쿼리 매개 변수
링크와 같이 ID를 기대하는 아래 코드 는 다음과 같습니다. http://myhost.com/items?id=23
var express = require('express');
var app = express();
app.get("/items", function(req, res) {
var id = req.query.id;
//further operations to perform
});
app.listen(3000);
2014 년 5 월 4 일 업데이트
오래된 대답은 여기에 보존되었습니다 : https://gist.github.com/stefek99/b10ed037d2a4a323d638
1) 급행 설치 : npm install express
app.js
var express = require('express');
var app = express();
app.get('/endpoint', function(request, response) {
var id = request.query.id;
response.end("I have received the ID: " + id);
});
app.listen(3000);
console.log("node express app started at http://localhost:3000");
2) 앱을 실행하십시오. node app.js
3) 브라우저를 방문하십시오. http://localhost:3000/endpoint?id=something
나는 ID를 받았다 : 무엇인가
(내 답변 이후 많은 것들이 바뀌었고 최신 상태로 유지할 가치가 있다고 생각합니다)
포트 9080에서 수신하고 GET 또는 POST 데이터를 구문 분석하고 응답의 일부로 클라이언트에 다시 보내는 작은 Node.js HTTP 서버는 다음과 같습니다.
var sys = require('sys'),
url = require('url'),
http = require('http'),
qs = require('querystring');
var server = http.createServer(
function (request, response) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end',function() {
var POST = qs.parse(body);
//console.log(POST);
response.writeHead( 200 );
response.write( JSON.stringify( POST ) );
response.end();
});
}
else if(request.method == 'GET') {
var url_parts = url.parse(request.url,true);
//console.log(url_parts.query);
response.writeHead( 200 );
response.write( JSON.stringify( url_parts.query ) );
response.end();
}
}
);
server.listen(9080);
로 저장하고 parse.js
"node parse.js"를 입력하여 콘솔에서 실행하십시오.
화이트 쿼크가 잘 응답했습니다. 그러나 현재 버전의 Node.js 및 Express.js에는 한 줄이 더 필요합니다. 'http'(두 번째 줄)를 추가하십시오. 이 호출이 작동하는 방법을 보여주는 전체 예제를 여기에 게시했습니다. 일단 실행되면 http://localhost:8080/?name=abel&fruit=apple
브라우저에 입력 하면 코드를 기반으로 멋진 응답을 얻을 수 있습니다.
var express = require('express');
var http = require('http');
var app = express();
app.configure(function(){
app.set('port', 8080);
});
app.get('/', function(req, res){
res.writeHead(200, {'content-type': 'text/plain'});
res.write('name: ' + req.query.name + '\n');
res.write('fruit: ' + req.query.fruit + '\n');
res.write('query: ' + req.query + '\n');
queryStuff = JSON.stringify(req.query);
res.end('That\'s all folks' + '\n' + queryStuff);
});
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
})
너무 간단합니다 :
URL 예 :
http://stackoverflow.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK
다음을 사용하여 쿼리 문자열의 모든 값을 인쇄 할 수 있습니다.
console.log("All query strings: " + JSON.stringify(req.query));
산출
모든 쿼리 문자열 : { "id": "3", "activatekey": "$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK"}
특정 인쇄하려면
console.log("activatekey: " + req.query.activatekey);
산출
활성화 키 : $ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK
에서 express.js
당신은 아주 쉽게 그것을 얻을 수 있습니다, 당신은 당신의 컨트롤러 기능으로 할 필요가 있습니다 :
app.get('/', (req, res, next) => {
const {id} = req.query;
// rest of your code here...
})
그리고 es6 구문을 사용한다고 가정하면됩니다.
PD. 새로운 es6 기능을 {id}
나타냅니다 Object destructuring
.
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
이것을 사용하거나 요청 매개 변수에서 특수 요소를 구문 분석하기 위해 본문 파서를 시도 할 수 있습니다.
url.parse를 사용하여 url 모듈을 사용하여 매개 변수를 수집 할 수 있습니다.
var url = require('url');
var url_data = url.parse(request.url, true);
var query = url_data.query;
expressjs에서는 다음과 같이 수행됩니다.
var id = req.query.id;
예 :
var express = require('express');
var app = express();
app.get('/login', function (req, res, next) {
console.log(req.query);
console.log(req.query.id); //Give parameter id
});
제 관점에서 저는 많은 사람들이 두 가지 다른 개념을 혼합한다고 생각합니다. REST 개발 중에는 "경로 변수"와 "요청 매개 변수"(쿼리 매개 변수)라는 두 가지 방법으로 URL에 정보를 전달하는 데 익숙했습니다. RFC는 다음과 같이 URI 부분을 설명합니다. 여기에 링크 설명을 입력하십시오. 따라서 저자는 요청 매개 변수를 전달하는 방법을 알고 싶다는 것을 이해했습니다. 주제를 더 이해하기 쉽게 만들고 싶었지만 해결책은 여러 번 언급되었습니다.
를 사용하여 URI에서 쿼리 매개 변수를 얻을 수 있습니다 request.query.<name of the parameter>
. 두 번째 언급 한 솔루션이었고 request.params.<name of the parameter>
경로 변수를 얻을 수 있습니다.
따라서이 "id"를받는 두 가지 방법이 있습니다. 1) params 사용 : 코드 params는 다음과 같습니다.
const courses = [{
id: 1,
name: 'Mathematics'
},
{
id: 2,
name: 'History'
}
];
그런 다음 params의 경우 다음과 같은 작업을 수행 할 수 있습니다.
app.get('/api/posts/:id',(req,res)=>{
const course = courses.find(o=>o.id == (req.params.id))
res.send(course);
});
2) 다른 방법은 쿼리 매개 변수를 사용하는 것입니다. URL은 "..... \ api \ xyz? id = 1"과 같이 표시됩니다. 여기서 "? id = 1"은 쿼리 부분입니다. 이 경우 다음과 같은 작업을 수행 할 수 있습니다.
app.get('/api/posts',(req,res)=>{
const course = courses.find(o=>o.id == (req.query.id))
res.send(course);
});
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('id: ' + req.query.id);
});
app.listen(3000);
(및 다른 답변에서 변수를 지정할 수 있다고 언급하지 않았 음) 뿐만 아니라 GET
요청 을 보내야 하는 경우이 기능을 사용할 수 있습니다.IP
Domain
port
function getCode(host, port, path, queryString) {
console.log("(" + host + ":" + port + path + ")" + "Running httpHelper.getCode()")
// Construct url and query string
const requestUrl = url.parse(url.format({
protocol: 'http',
hostname: host,
pathname: path,
port: port,
query: queryString
}));
console.log("(" + host + path + ")" + "Sending GET request")
// Send request
console.log(url.format(requestUrl))
http.get(url.format(requestUrl), (resp) => {
let data = '';
// A chunk of data has been received.
resp.on('data', (chunk) => {
console.log("GET chunk: " + chunk);
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
console.log("GET end of response: " + data);
});
}).on("error", (err) => {
console.log("GET Error: " + err);
});
}
파일 상단에 모듈이 필요하다는 것을 놓치지 마십시오.
http = require("http");
url = require('url')
또한 https
보안 도메인 및 SSL을 통한 통신을 위해 모듈을 사용할 수 있습니다 . 따라서이 두 줄은 변경됩니다.
https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......
express@4.16과 함께 MEANJS 0.6.0 을 사용 하고 있습니다.
고객:
제어 장치:
var input = { keyword: vm.keyword };
ProductAPi.getOrder(input)
서비스:
this.getOrder = function (input) {return $http.get('/api/order', { params: input });};
섬기는 사람
노선
app.route('/api/order').get(products.order);
제어 장치
exports.order = function (req, res) {
var keyword = req.query.keyword
...
-------- 쿼리 문자열 데이터 액세스 -------
링크 http://webapplog.com/search?term=node.js&page=1 이라고 가정합니다 .
따라서 명시 적으로 다음을 사용할 수 있습니다.
req.query.term
req.query.page
또는 req.query
(객체에서 쿼리를 가져옵니다)
app.get('http://webapplog.com/search?term=node.js&page=1',(req, res)=>{
res.json({term:req.query.term, page:req.query.page})
})
-------- URL 매개 변수 액세스 -------
이것이 링크 http://webapplog.com/node.js/pages/100
이라고 가정하면 다음과 같이
명시 적으로 사용할 수 있습니다.
app.get('/:term/pages/:page',....)
req.params.term
req.params.page
app.get('http://webapplog.com/:term/pages/:page',(req, res)=>{
res.json({term:req.params.term, page:req.params.page})
})