답변:
따라서 express reference 을 확인한 후 req.query.color
원하는 값을 반환 한다는 것을 알았 습니다.
req.params는 URL에 ':'가있는 항목을 나타내고 req.query는 '?'와 연관된 항목을 나타냅니다.
예:
GET /something?color1=red&color2=blue
그런 다음 처리기로 표현하십시오.
app.get('/something', (req, res) => {
req.query.color1 === 'red' // true
req.query.color2 === 'blue' // true
})
id
다음과 같이 함수 의 가치를 얻을 수 있습니다 : var sampleId = req.params.id;
.
req.params.whatever
최신 버전에서 사용하십시오 .
req.params
다른 마음 req.query
! expressjs.com/en/api.html#req.params expressjs.com/en/api.html#req.query @adelriosantiago
경로에서 쿼리 문자열 매개 변수의 값을 얻으려면 req.query를 사용하십시오. req.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);
});
업데이트 : req.param()
이제 더 이상 사용되지 않으므로 앞으로이 답변을 사용하지 마십시오.
귀하의 답변이 선호되는 방법이지만,로 URL, 게시물 및 경로 매개 변수에 모두 액세스 할 수 있다고 지적했습니다 req.param(parameterName, defaultValue)
.
귀하의 경우 :
var color = req.param('color');
빠른 가이드에서 :
조회는 다음 순서로 수행됩니다.
- 필수 매개 변수
- 요청 바디
- 요청
이 안내서에는 다음 내용이 나와 있습니다.
각 객체의 입력을 실제로 받아들이지 않는 한 req.body, req.params 및 req.query에 직접 액세스하는 것이 명확해야합니다.
그러나 실제로는 실제로 req.param()
충분히 명확하고 특정 유형의 리팩토링을 더 쉽게 만듭니다.
쿼리 문자열과 매개 변수가 다릅니다.
단일 라우팅 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
@Zugwait의 답변이 맞습니다. req.param()
더 이상 사용되지 않습니다. 당신이 사용한다 req.params
, req.query
또는 req.body
.
그러나 더 명확하게하기 위해 :
req.params
경로 값만 채워집니다. 즉,와 같은 경로가있는 경우 in 또는에 /users/:id
액세스 할 수 있습니다 .id
req.params.id
req.params['id']
req.query
와 req.body
로 채워집니다 모든 관계없이 경로에 여부에 PARAMS. 물론 쿼리 문자열의 매개 변수는에서 사용할 수 있으며 req.query
게시물 본문의 매개 변수는에서 사용할 수 있습니다 req.body
.
따라서 color
경로에없는 것처럼 질문에 대답 하면 req.query.color
또는 을 사용하여 얻을 수 있습니다 req.query['color']
.
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!')
)
Express에서 내 앱 중 일부와 함께 사용하기 시작한 좋은 기술은 express의 요청 객체의 쿼리, 매개 변수 및 본문 필드를 병합하는 객체를 만드는 것입니다.
//./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";
}
}