PHP의 $_GET
에서 변수를 가져오는 것처럼 Node.js의 쿼리 문자열에서 변수를 가져올 수 있습니까?
Node.js에서 요청에서 URL을 얻을 수 있다는 것을 알고 있습니다. 쿼리 문자열 매개변수를 가져오는 방법이 있습니까?
질문자 :XMen
PHP의 $_GET
에서 변수를 가져오는 것처럼 Node.js의 쿼리 문자열에서 변수를 가져올 수 있습니까?
Node.js에서 요청에서 URL을 얻을 수 있다는 것을 알고 있습니다. 쿼리 문자열 매개변수를 가져오는 방법이 있습니까?
태그에서 Express.js를 언급했기 때문에 여기에 Express 관련 답변이 있습니다. use req.query . 예
var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('id: ' + req.query.id); }); app.listen(3000);
Express에서는 이미 완료되었으며 req.query 를 사용하면 됩니다.
var id = req.query.id; // $_GET["id"]
그렇지 않으면 NodeJS에서 req.url 및 내장 url
모듈에 액세스 하여 수동으로 url.parse할 수 있습니다.
var url = require('url'); var url_parts = url.parse(request.url, true); var query = url_parts.query;
Express에서는 req.query
사용합니다.
req.params
는 쿼리 문자열 매개변수가 아닌 경로 매개변수만 가져옵니다. 특급 또는 항해 문서를 참조하십시오.
(req.params) 경로 매개변수 확인, 예: /user/:id
(req.query) 쿼리 문자열 매개변수 확인, 예: ?id=12 urlencoded 본문 매개변수 확인
(req.body), 예: id=12 urlencoded 요청 본문을 활용하려면 req.body가 객체여야 합니다. 이것은 _express.bodyParser 미들웨어를 사용하여 수행할 수 있습니다.
즉, 대부분의 경우 소스와 상관없이 매개변수의 값을 얻으려고 합니다. 이 경우 req.param('foo')
. 이것은 Express 4부터 더 이상 사용되지 않습니다. http://expressjs.com/en/4x/api.html#req.param
변수가 경로 매개변수, 쿼리 문자열 또는 인코딩된 요청 본문에 있는지 여부에 관계없이 매개변수 값이 반환됩니다.
참고 사항 - 세 가지 유형의 요청 매개변수(PHP의 $_REQUEST
와 유사)의 교차점을 모두 얻으려는 경우 매개변수를 병합하기만 하면 됩니다. 다음은 Sails에서 설정 하는 방법입니다. 경로/경로 매개변수 객체( req.params
)에는 배열 속성이 있으므로 순서가 중요합니다( Express 4에서는 변경될 수 있음 ).
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
//get query¶ms in express //etc. example.com/user/000000?sex=female app.get('/user/:id', function(req, res) { const query = req.query;// query = {sex:"female"} const params = req.params; //params = {id:"000000"} })
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);
당신이 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)
다음과 같이 할 수 있어야 합니다.
var http = require('http'); var url = require('url'); http.createServer(function(req,res){ var url_parts = url.parse(req.url, true); var query = url_parts.query; console.log(query); //{Object} res.end("End") })
2014년 5월 4일 업데이트
여기에 보존 된 이전 답변 : https://gist.github.com/stefek99/b10ed037d2a4a323d638
1) 익스프레스 설치: npm install express
앱.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에서 수신 대기하는 작은 Node.js HTTP 서버는 GET 또는 POST 데이터를 구문 분석하고 응답의 일부로 클라이언트에 다시 전송합니다.
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"를 입력하여 콘솔에서 실행합니다.
Whitequark는 친절하게 응답했습니다. 그러나 현재 버전의 Node.js 및 Express.js에서는 한 줄이 더 필요합니다. 'require 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
당신이 사용할 수있는
request.query.<varible-name>;
익스프레스 ^4.15.4와 함께 사용할 수 있습니다.
var express = require('express'), router = express.Router(); router.get('/', function (req, res, next) { console.log(req.query); });
도움이 되었기를 바랍니다.
express.js
에서는 매우 쉽게 얻을 수 있습니다. 컨트롤러 기능에서 해야 할 일은 다음과 같습니다.
app.get('/', (req, res, next) => { const {id} = req.query; // rest of your code here... })
es6 구문을 사용한다고 가정하면 그게 전부입니다.
PD. {id}
는 새로운 es6 기능인 Object destructuring
나타냅니다.
app.get('/user/:id', function(req, res) { res.send('user' + req.params.id); });
이것을 사용하거나 요청 매개변수에서 특수 요소를 구문 분석하기 위해 body-parser를 시도할 수 있습니다.
가져오는 특정 간단한 방법 표현
https://...?user=abc&id=123과 같은 쿼리 문자열('?' 뒤)
var 표현 = 요구('표현');
var app = express(); app.get('/', function(req, res){ res.send('id: ' + req.query.id); }); app.listen(3000);
https://.../get/users/:id와 같은 쿼리 매개변수
var 표현 = 요구('표현'); var 앱 = 익스프레스();
app.get('/get/users/:id', function(req, res){ res.send('id: ' + req.params.id); }); app.listen(3000);
request.query
사용하여 쿼리에 액세스하는 것과 관련하여 여기에 많은 답변이 있지만 그 유형의 단점을 언급한 사람은 없습니다. 쿼리 문자열 유형은 문자열 또는 배열일 수 있으며 이 유형은 사용자가 제어합니다.
예를 들어 다음 코드를 사용합니다.
const express = require("express"); const app = express(); app.get("/", function (req, res) { res.send(`Your name is ${(req.query.name || "").length} characters long`); }); app.listen(3000);
/?name=bob
요청하면 Your name is 3 characters long
반환하지만 /?name=bob&name=jane
을 요청하면 매개변수가 이제 배열 ['bob', 'jane']
Your name is 2 characters long
반환합니다.
Express는 2개의 쿼리 파서를 제공합니다: 단순 및 확장, 둘 다 문자열 또는 배열을 제공합니다. 가능한 부작용에 대한 메서드를 확인하거나 형식을 확인하는 대신 모든 배열 또는 모든 문자열과 같은 일관된 형식을 갖도록 파서를 재정의해야 한다고 개인적으로 생각합니다.
const express = require("express"); const app = express(); const querystring = require("querystring"); // if asArray=false only the first item with the same name will be returned // if asArray=true all items will be returned as an array (even if they are a single item) const asArray = false; app.set("query parser", (qs) => { const parsed = querystring.parse(qs); return Object.entries(parsed).reduce((previous, [key, value]) => { const isArray = Array.isArray(value); if (!asArray && isArray) { value = value[0]; } else if (asArray && !isArray) { value = [value]; } previous[key] = value; return previous; }, {}); }); app.get("/", function (req, res) { res.send(`Your name is ${(req.query.name || "").length} characters long`); }); app.listen(3000);
따라서 이 "id"를 수신할 수 있는 두 가지 방법이 있습니다. 1) 매개변수 사용: 코드 매개변수는 다음과 같습니다. 배열이 있다고 가정해 보겠습니다.
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); });
url 모듈을 사용하여 url.parse를 사용하여 매개변수를 수집할 수 있습니다.
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 });
GET
요청을 Domain
뿐만 아니라 IP
로 보내야 하는 경우 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')
또한 보안 도메인 및 SSL을 통해 통신 https
모듈을 사용할 수 있다는 점을 염두에 두십시오. 따라서 이 두 줄은 다음과 같이 변경됩니다.
https = require("https"); ... https.get(url.format(requestUrl), (resp) => { ......
표현을 피하려면 다음 예를 사용하십시오.
var http = require('http'); const url = require('url'); function func111(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var q = url.parse(req.url, true); res.end("9999999>>> " + q.query['user_name']); } http.createServer(func111).listen(3000);
용법:
curl http://localhost:3000?user_name=user1
일에 의해
나는 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:www.stackoverflow.com/questions/6912584/how-to-get-get-query-string-variables-in-express-js-on-node-js
JS 객체를 JSON 문자열로 변환 (0) | 2023.04.09 |
---|---|
클래스 이름 지정 - 모든 것을 호출하는 것을 피하는 방법 "<WhatEver> 매니저"? [닫은] (0) | 2023.04.09 |
중복 행을 제거하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
스테이징 영역에서 단일 파일을 어떻게 제거합니까(git add 실행 취소)? (0) | 2023.04.09 |
함수 앞에 느낌표는 무엇을 합니까? (0) | 2023.04.09 |