Jak uzyskać dostęp do parametrów GET po "?"in Express?
Wiem jak zdobyć params dla takich zapytań:
app.get('/sample/:id', routes.sample);
W tym przypadku mogę użyć req.params.id
, Aby uzyskać parametr (np. 2
w /sample/2
).
Jednak, dla url jak /sample/2?color=red
, Jak mogę uzyskać dostęp do zmiennej color
?
Próbowałem req.params.color
ale nie zadziałało.
8 answers
Więc, po sprawdzeniu express reference , odkryłem, że req.query.color
zwróci mi wartość, której szukam.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-09 12:15:01
Użyj req.query, do uzyskania wartości w parametrze ciągu zapytania w trasie. Refer req.query . Say if in a route, http://localhost:3000/?name=satyam chcesz uzyskać wartość parametru name, wtedy twój' Get ' będzie przebiegał w następujący sposób: -
app.get('/', function(req, res){
console.log(req.query.name);
res.send('Response send to client::'+req.query.name);
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-28 17:00:55
Aktualizacja: req.param()
jest obecnie przestarzały, więc w przyszłości nie używaj tej odpowiedzi.
Twoja odpowiedź jest preferowanym sposobem, aby to zrobić, jednak pomyślałem, że chciałbym zwrócić uwagę, że można również uzyskać dostęp do url, post, i parametry trasy wszystkie z req.param(parameterName, defaultValue)
.
W Twoim przypadku:
var color = req.param('color');
Z ekspresowego przewodnika:
Wyszukiwanie odbywa się w następującej kolejności:
[[21]] req.params [[21]] req.body [[21]] req.zapytanie
Uwaga przewodnik podaje co następuje:
Bezpośredni dostęp do req.body, req.params, and req.zapytanie powinno być preferowane dla jasności-chyba, że naprawdę akceptujesz dane wejściowe z każdego obiektu.
Jednak w praktyce okazało się, że req.param()
jest wystarczająco jasne i ułatwia niektóre rodzaje refaktoryzacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-09 15:50:07
@Zugwait odpowiedź jest prawidłowa. req.param()
jest przestarzały. Należy użyć req.params
, req.query
lub req.body
.
Ale żeby było jaśniej:
req.params
zostanie wypełniona tylko wartościami trasy. Oznacza to, że jeśli masz trasę podobną do /users/:id
, możesz uzyskać dostęp do id
albo w req.params.id
lub req.params['id']
.
req.query
i req.body
będzie wypełniona wszystkimi paramami, niezależnie od tego, czy znajdują się na trasie. Oczywiście parametry w łańcuchu zapytania będą dostępne w req.query
i parametry w treści postu będą dostępne w req.body
.
Więc, odpowiadając na twoje pytania, ponieważ color
nie jest w trasie, powinieneś być w stanie uzyskać go za pomocą req.query.color
lub req.query['color']
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-18 13:39:31
Ciąg zapytania i parametry są różne.
Musisz używać obu w jednym routingu url
Proszę sprawdzić poniższy przykład może być dla Ciebie przydatny.
app.get('/sample/:id', function(req, res) {
var id = req.params.id; //or use req.param('id')
................
});
Get the link to pass your second segment is your ID example: http://localhost:port/sample/123
Jeśli napotkasz problem, użyj zmiennych przekazujących jako ciąg zapytania za pomocą '?"operator
app.get('/sample', function(req, res) {
var id = req.query.id;
................
});
Get link your like this example: http://localhost:port/sample?id=123
Zarówno w jednym przykładzie
app.get('/sample/:id', function(req, res) {
var id = req.params.id; //or use req.param('id')
var id2 = req.query.id;
................
});
Pobierz przykład linku: http://localhost:port/sample/123?id=123
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 07:28:31
Instrukcja express mówi, że należy użyć req.query {[3] } aby uzyskać dostęp do QueryString.
// Requesting /display/post?size=small
app.get('/display/post', function(req, res, next) {
var isSmall = req.query.size === 'small'; // > true
// ...
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-29 15:10:23
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!')
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 20:53:00
Fajną techniką, której używam w niektórych aplikacjach express, jest tworzenie obiektu, który łączy pola query, params i body obiektu request 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;
Następnie w ciele kontrolera, lub gdziekolwiek indziej w łańcuchu ekspresowych żądań, możesz użyć czegoś takiego jak poniżej:
//./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);
});
To sprawia, że miło i wygodnie jest po prostu "zagłębić się "we wszystkie" niestandardowe dane", które użytkownik mógł wysłać ze swoim żądaniem.
Uwaga
Dlaczego pole rekwizytów? Ponieważ był to wycinek, używam tej techniki w wielu moich API, przechowuję również dane uwierzytelniania / autoryzacji na tym obiekcie, przykład poniżej.
/*
* @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";
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-09 08:51:29