Express에서 "?" 다음에 GET 매개 변수에 액세스하는 방법은 무엇입니까?
다음과 같은 쿼리에 대한 매개 변수를 가져오는 방법을 알고 있습니다.
app.get('/sample/:id', routes.sample);
이 경우, 저는 사용할 수 있습니다.req.params.id
변수 매변수가예니다옵져를개예()를 가져옵니다.2
/sample/2
).
, 하만지와 같은 에는 과에같 URL을 사용합니다./sample/2?color=red
변수에 액세스하려면 어떻게 해야 합니까?color
?
나는 노력했다.req.params.color
하지만 그것은 작동하지 않았다.
그래서, 저는 명시적 참조를 확인한 후, 그것을 발견했습니다.req.query.color
제가 찾고 있는 가치를 돌려줄 겁니다
req.params는 URL에 ':'가 있는 항목을 참조하고 requ.query는 '?'와 관련된 항목을 참조합니다.
예:
GET /something?color1=red&color2=blue
그 다음에 핸들러는 다음과 같이 표현합니다.
app.get('/something', (req, res) => {
req.query.color1 === 'red' // true
req.query.color2 === 'blue' // true
})
경로의 쿼리 문자열 매개 변수 값을 가져오려면 require.query를 사용합니다.requ.query를 참조하십시오.경로에서 이름 매개 변수 값을 가져오려면 http://localhost:3000/?name=satyam을 입력하면 'Get' 경로 핸들러가 다음과 같이 됩니다.
app.get('/', function(req, res){
console.log(req.query.name);
res.send('Response send to client::'+req.query.name);
});
쿼리 문자열과 매개 변수가 다릅니다.
단일 라우팅 URL에서 둘 다 사용해야 합니다.
아래의 예를 확인해 주십시오.
app.get('/sample/:id', function(req, res) {
var id = req.params.id; //or use req.param('id')
................
});
두 번째 세그먼트를 통과할 링크를 가져오십시오. ID 예: http://localhost:port/sample/123
문제가 발생하면 '?' 연산자를 사용하여 변수 전달을 쿼리 문자열로 사용하십시오.
app.get('/sample', function(req, res) {
var id = req.query.id;
................
});
다음 예와 같은 링크 가져오기: http://localhost:port/sample?id=123
둘 다 하나의 예에서
app.get('/sample/:id', function(req, res) {
var id = req.params.id; //or use req.param('id')
var id2 = req.query.id;
................
});
링크 예제 가져오기: http://localhost:port/sample/123?id=123
req.param()
이제는 더 이상 사용되지 않으므로 앞으로는 이 답변을 사용하지 마십시오.
귀하의 답변이 선호되는 방법이지만, URL, 게시물 및 경로 매개 변수에 모두 액세스할 수 있다는 점을 지적하고 싶습니다.
당신의 경우:
var color = req.param('color');
익스프레스 가이드에서:
조회는 다음 순서로 수행됩니다.
- q.파라미터
- req.본체
- req.반드시 해야 할
이 가이드에는 다음 사항이 설명되어 있습니다.
각 개체의 입력을 실제로 수락하지 않는 한 명확성을 위해 req.body, req.params 및 requ.query에 직접 액세스하는 것이 좋습니다.
하지만 실제로 발견한 것은req.param()
명확하게 하고 특정 유형의 리팩터링을 더 쉽게 합니다.
@Zugwait의 대답은 정확합니다. req.param()
사용되지 않습니다.당신은 야합다니해를 사용해야 .req.params
,req.query
또는req.body
.
하지만 좀 더 명확하게 하기 위해서입니다.
req.params
경로 값만 입력됩니다.즉, 만약 당신이 다음과 같은 경로를 가지고 있다면./users/:id
은 할수다있니에 할 수 .id
어느 쪽이든req.params.id
또는req.params['id']
.
req.query
그리고.req.body
경로 내에 있는지 여부에 관계없이 모든 매개 변수가 채워집니다.물론 쿼리 문자열의 매개 변수는 다음에서 사용할 수 있습니다.req.query
포스트 바디의 매개 변수는 다음에서 사용할 수 있습니다.req.body
.
그래서, 당신의 질문에 대답합니다.color
경로에 없습니다. 사용하여 얻을 수 있어야 합니다.req.query.color
또는req.query['color']
.
QueryString에 액세스하려면 require.query를 사용해야 한다고 고속 설명서에 나와 있습니다.
// Requesting /display/post?size=small
app.get('/display/post', function(req, res, next) {
var isSmall = req.query.size === 'small'; // > true
// ...
});
const express = require('express')
const bodyParser = require('body-parser')
const { usersNdJobs, userByJob, addUser , addUserToCompany } = require ('./db/db.js')
const app = express()
app.set('view engine', 'pug')
app.use(express.static('public'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.get('/', (req, res) => {
usersNdJobs()
.then((users) => {
res.render('users', { users })
})
.catch(console.error)
})
app.get('/api/company/users', (req, res) => {
const companyname = req.query.companyName
console.log(companyname)
userByJob(companyname)
.then((users) => {
res.render('job', { users })
}).catch(console.error)
})
app.post('/api/users/add', (req, res) => {
const userName = req.body.userName
const jobName = req.body.jobName
console.log("user name = "+userName+", job name : "+jobName)
addUser(userName, jobName)
.then((result) => {
res.status(200).json(result)
})
.catch((error) => {
res.status(404).json({ 'message': error.toString() })
})
})
app.post('/users/add', (request, response) => {
const { userName, job } = request.body
addTeam(userName, job)
.then((user) => {
response.status(200).json({
"userName": user.name,
"city": user.job
})
.catch((err) => {
request.status(400).json({"message": err})
})
})
app.post('/api/user/company/add', (req, res) => {
const userName = req.body.userName
const companyName = req.body.companyName
console.log(userName, companyName)
addUserToCompany(userName, companyName)
.then((result) => {
res.json(result)
})
.catch(console.error)
})
app.get('/api/company/user', (req, res) => {
const companyname = req.query.companyName
console.log(companyname)
userByJob(companyname)
.then((users) => {
res.render('jobs', { users })
})
})
app.listen(3000, () =>
console.log('Example app listening on port 3000!')
)
간단히 사용할 수 있습니다.req.query
쿼리 매개 변수를 잊습니다.
app.get('/', (req, res) => {
let color1 = req.query.color1
let color2 = req.query.color2
})
그url
module은 URL 확인 및 구문 분석을 위한 유틸리티를 제공합니다.Express를 사용하지 않는 URL 구문 분석:
const url = require('url');
const queryString = require('querystring');
let rawUrl = 'https://stackoverflow.com/?page=2&size=3';
let parsedUrl = url.parse(rawUrl);
let parse = queryString.parse(parsedUrl.query);
// parse = { page: '2', size: '3' }
다른 방법:
const url = require('url');
app.get('/', (req, res) => {
const queryObject = url.parse(req.url,true).query;
});
url.parse(req.url,true).query
돌아온다{ color1: 'red', color2: 'green' }.
url.parse(req.url,true).host
돌아온다'localhost:8080'.
url.parse(req.url,true).search
'?color1=red&color2=green'을 반환합니다.
사용하기만 하면 됩니다.app.get
:
app.get('/some/page/here', (req, res) => {
console.log(req.query.color) // Your color value will be displayed
})
expressjs.com 설명서 api에서 확인할 수 있습니다. http://expressjs.com/en/api.html
제가 익스프레스에 있는 일부 앱에서 사용하기 시작한 좋은 기술은 익스프레스의 요청 객체의 쿼리, 매개 변수 및 본문 필드를 병합하는 객체를 만드는 것입니다.
//./express-data.js
const _ = require("lodash");
class ExpressData {
/*
* @param {Object} req - express request object
*/
constructor (req) {
//Merge all data passed by the client in the request
this.props = _.merge(req.body, req.params, req.query);
}
}
module.exports = ExpressData;
그런 다음 컨트롤러 본문 또는 고속 요청 체인의 다른 범위에서 다음과 같은 방법을 사용할 수 있습니다.
//./some-controller.js
const ExpressData = require("./express-data.js");
const router = require("express").Router();
router.get("/:some_id", (req, res) => {
let props = new ExpressData(req).props;
//Given the request "/592363122?foo=bar&hello=world"
//the below would log out
// {
// some_id: 592363122,
// foo: 'bar',
// hello: 'world'
// }
console.log(props);
return res.json(props);
});
이를 통해 사용자가 요청과 함께 전송했을 수 있는 모든 "사용자 정의 데이터"를 "탐색"하는 것이 쉽고 편리합니다.
메모
'props' 필드가 필요한 이유는 무엇입니까?그것은 컷다운 스니펫이었기 때문에, 저는 이 기술을 여러 API에서 사용하고 있으며, 아래와 같이 인증/권한 부여 데이터를 이 개체에 저장합니다.
/*
* @param {Object} req - Request response object
*/
class ExpressData {
/*
* @param {Object} req - express request object
*/
constructor (req) {
//Merge all data passed by the client in the request
this.props = _.merge(req.body, req.params, req.query);
//Store reference to the user
this.user = req.user || null;
//API connected devices (Mobile app..) will send x-client header with requests, web context is implied.
//This is used to determine how the user is connecting to the API
this.client = (req.headers) ? (req.headers["x-client"] || (req.client || "web")) : "web";
}
}
언급URL : https://stackoverflow.com/questions/17007997/how-to-access-the-get-parameters-after-in-express
'programing' 카테고리의 다른 글
예기치 않게 끝나는 URL에 대해 요청 형식을 인식할 수 없습니다. (0) | 2023.05.24 |
---|---|
가 비어 있는지 확인하는 방법은 무엇입니까? (앵글 2+에서 지금까지) (0) | 2023.05.24 |
C#을 사용하여 .NET에서 현재 사용자 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.05.24 |
PostgreSQL: ERROR: 연산자가 존재하지 않습니다. 정수 = 문자가 다양합니다. (0) | 2023.05.24 |
잘못된 작업예외:어셈블리에서 'UserSecretsIdAttribute'를 찾을 수 없습니다. (0) | 2023.05.24 |