Как получить переменные GET (строка запроса) в Express.js на узле.Яш?
можем ли мы получить переменные в строке запроса в узле.js так же, как мы получаем их в $_GET
в PHP?
Я знаю, что в узел.js мы можем получить URL-адрес в запросе. Есть ли способ получить параметры строки запроса?
20 ответов
Да, вы можете получить доступ к req.URL-адрес и строение url
модуль URL-адрес.разбор это вручную:
var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
, в expressjs это уже сделано для вас, и вы можете просто использовать req.запрос для этого:
var id = req.query.id; // $_GET["id"]
Так как Вы упомянули Express.js в ваших тегах, вот экспресс-конкретный ответ: используйте req.запрос. Е. Г.
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('id: ' + req.query.id);
});
app.listen(3000);
В Express используйте req.query
.
req.params
получает только параметры маршрута, а не параметры строки запроса. Вижу экспресс или Парус документы:
(req.params) проверяет параметры маршрута, например: / user/: id
(req.query) проверяет параметры строки запроса, например:?id=12 проверяет urlencoded body params
(req.тело), например: id=12 для использования urlencoded тел запросов, req.тело должно быть объектом. Этот можно сделать с помощью _express.промежуточное ПО bodyParser.
тем не менее, большую часть времени вы хотите получить значение параметра независимо от его источника. В этом случае используйте req.param('foo')
.
значение параметра будет возвращено независимо от того, была ли переменная в параметрах маршрута, строке запроса или закодированном теле запроса.
Side note-если вы хотите получить пересечение всех трех типов параметров запроса (подобно PHP $_REQUEST
), вам просто нужно объединить параметры вместе - вот как я установить его в паруса. Имейте в виду, что объект параметров пути/маршрута (req.params
) имеет свойства массива, поэтому порядок имеет значение (хотя это может измениться в Express 4)
Для Экспресс.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;
где URL для get должен быть
/path/filename?id=123&option=456
вы должны быть в состоянии сделать что-то вроде этого:
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")
})
//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"}
})
есть 2 способа передать параметры через GET method
Способ 1 :
Подход MVC, где вы передаете параметры, такие как /routename/:paramname
В этом случае можно использовать req.парамы.paramname чтобы получить значение параметра, например, см. ниже код, где я ожидаю Id как param
ссылка может быть такой: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);
обновление 4 мая 2014
старый ответ сохранился здесь:https://gist.github.com/stefek99/b10ed037d2a4a323d638
1) установить express: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
Я получил идентификатор: что-то
(многое изменилось так как мой ответ, и я считаю, что стоит держать вещи в курсе)
если вы используете ЕС6 и Экспресс попробуй такое разрушение подход:
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)
небольшой узел.JS HTTP server прослушивает порт 9080, анализирует данные 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 и Экспресс.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=a$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK
вы можете распечатать все значения строки запроса, используя:
console.log("All query strings: " + JSON.stringify(req.query));
выход
все строки запроса: {"id":"3","activatekey": "$2a$08$jvGevXUOvYxKsiBt.ПМП.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK"}
для конкретной печати:
console.log("activatekey: " + req.query.activatekey);
выход
activatekey: $2a $ 08$jvGevXUOvYxKsiBt.ПМП.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK
вы можете использовать с express ^4.15.4:
var express = require('express'),
router = express.Router();
router.get('/', function (req, res, next) {
console.log(req.query);
});
надеюсь, что это помогает.
app.get('/user/:id', function(req, res) {
res.send('user' + req.params.id);
});
вы можете использовать это или вы можете попробовать body-parser для разбора специального элемента из параметров запроса.
на express.js
вы можете получить его довольно легко, все, что вам нужно сделать в функции контроллера:
app.get('/', (req, res, next) => {
const {id} = req.query;
// rest of your code here...
})
и это все, предполагая, что вы используете синтаксис es6.
PD. {id}
расшифровывается как Object destructuring
, новая функция es6.
вы можете использовать модуль url для сбора параметров с помощью 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
});
вы можете использовать req.params с ExpressJS
router.get('/recipe/:id', function (req, res, next) {
database.sendQuery("SELECT * FROM recipe WHERE id = " + req.params.id , function (err, results) {
if (err) {
console.log(err)
} else {
res.json(results)
}
})
});