Hoe krijg je Variabelen in Express.js op Node.js?

Kunnen we de variabelen in de query-string in Node.js net zoals we krijgen in $_GETin PHP?

Ik weet dat in node.js we kunnen de URL op verzoek krijgen. Is er een methode om de query-stringparameters te krijgen?


1, Autoriteit 100%

In Express is het al gedaan voor u en u kunt eenvoudig req.query Daarvoor:

var id = req.query.id; // $_GET["id"]

Anders, in NODEJS, hebt u toegang tot req.url en de ingebouwde urlMODULE AAN URL.parse het handmatig:

var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;

2, Autoriteit 123%

Sinds u express.js in uw tags hebt genoemd, is hier een express-specifiek antwoord: Gebruik req.Query . B.g

var express = require('express');
var app = express();
app.get('/', function(req, res){
  res.send('id: ' + req.query.id);
});
app.listen(3000);

3, Autoriteit 34%

Gebruik in Express req.query.

req.paramskrijgt alleen de routeparameters, niet de query string parameters. Zie de express of Sails Documentatie:

(req.params) controleert routeparams, ex: / user /: id

(req.query) cheques query string params, ex 😕 id = 12 controles urlencodeed lichaam params

(req.body), ex: id = 12 om urlencodeerde aanvraagorganen te gebruiken, moet REQ.Body een object zijn. Dit kan worden gedaan met behulp van de _express.bodyparker middleware.

Dat gezegd hebbende, waarvan u de meeste tijd de waarde van een parameter wilt krijgen, ongeacht de bron. Gebruik in dat geval req.param('foo'). Merk op dat dit is verafschuwd vanaf Express 4: http://expressjs.com /en/4x/api.html#req.param

De waarde van de parameter wordt geretourneerd of de variabele zich in de routeparameters, queryreeks of de gecodeerde aanvraagorgaan bevond.

Zijbiljet- Als u erop gericht op het snijden van alle drie soorten aanvraagparameters (vergelijkbaar met PHP’s $_REQUEST), moet u alleen de parameters samenvoegen – hier is hoe ik Zet het in Zeilen . Houd er rekening mee dat het PATH / ROUTE PARAMETERS OBJECT (req.params) ARRAY EIGENSCHAPPEN, dus besteltels heeft (hoewel dit Kan veranderen in Express 4 )


Antwoord 4, autoriteit 6%

Ik leerde van de andere antwoorden en besloot deze code op mijn hele site te gebruiken:

var query = require('url').parse(req.url,true).query;

Dan kun je gewoon bellen

var id = query.id;
var option = query.option;

waar de URL voor get zou moeten staan

/path/filename?id=123&option=456

Antwoord 5, autoriteit 5%

//get query&params 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"}
})

Antwoord 6, autoriteit 4%

Er zijn 2 manieren om parameters door te geven via de GET-methode

Methode 1:
De MVC-benadering waarbij u de parameters doorgeeft zoals /routename/:paramname
In dit geval kunt u req.params.paramname gebruiken om de parameterwaarde te krijgen. Zie bijvoorbeeld onderstaande code waar ik Id verwacht als een param
link zou kunnen zijn als: 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);

Methode 2:
Algemene aanpak: variabelen doorgeven als queryreeks met ‘?’ operator
Verwijs bijvoorbeeld naar onderstaande code waar ik Id verwacht als een queryparameter
link zou kunnen zijn als: 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);

Antwoord 7, autoriteit 4%

Als je ES6en Expressgebruikt, probeer dan deze destructuring-aanpak:

const {id, since, fields, anotherField} = request.query;

In context:

const express = require('express');
const app = express();
app.get('/', function(req, res){
   const {id, since, fields, anotherField} = req.query;
});
app.listen(3000);

U kunt ook standaardwaarden gebruiken met 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)

Antwoord 8, autoriteit 3%

Je zou zoiets als dit moeten kunnen doen:

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")
})

Antwoord 9, autoriteit 2%

UPDATE 4 mei 2014

Oud antwoord hier bewaard: https://gist.github.com/stefek99/b10ed037d2a4a323d638


1) Express installeren: 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) Start de app: node app.js

3) Bezoek in de browser: http://localhost:3000/endpoint?id=something

Ik heb de ID ontvangen: iets


(veel dingen zijn veranderd sinds mijn antwoord en ik denk dat het de moeite waard is om dingen up-to-date te houden)


Antwoord 10, autoriteit 2%

Een kleine Node.js HTTP-server die luistert op poort 9080, GET- of POST-gegevens parseert en terugstuurt naar de client als onderdeel van het antwoord is:

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);

Sla het op als parse.jsen voer het uit op de console door “node parse.js” in te voeren.


Antwoord 11, autoriteit 2%

Whitequark reageerde aardig. Maar met de huidige versies van Node.js en Express.js is er nog een regel nodig. Zorg ervoor dat u de ‘require http’ (tweede regel) toevoegt. Ik heb hier een vollediger voorbeeld geplaatst dat laat zien hoe deze oproep kan werken. Als het eenmaal is uitgevoerd, typt u http://localhost:8080/?name=abel&fruit=applein uw browser en u krijgt een coole reactie op basis van de code.

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'));
})

Antwoord 12

Het is zo eenvoudig:

Voorbeeld-URL:

http://stackoverflow.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK

U kunt alle waarden van de queryreeks afdrukken met:

console.log("All query strings: " + JSON.stringify(req.query));

Uitvoer

Alle queryreeksen: { “id”:”3″,”activatekey”:”$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjz
fUrqLrgS3zXJVfVRK”}

Om specifiek af te drukken:

console.log("activatekey: " + req.query.activatekey);

Uitvoer

activeringssleutel: $2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK


Antwoord 13

U kunt gebruiken

request.query.<varible-name>;

Antwoord 14

U kunt gebruiken met express ^4.15.4:

var express = require('express'),
    router = express.Router();
router.get('/', function (req, res, next) {
    console.log(req.query);
});

Hopelijk helpt dit.


Antwoord 15

In express.jskun je het vrij eenvoudig krijgen, het enige wat je hoeft te doen in je controllerfunctie is:

app.get('/', (req, res, next) => {
   const {id} = req.query;
   // rest of your code here...
})

En dat is alles, ervan uitgaande dat u de es6-syntaxis gebruikt.

PD. {id}staat voor Object destructuring, een nieuwe es6-functie.


Antwoord 16

app.get('/user/:id', function(req, res) {
    res.send('user' + req.params.id);    
});

Je kunt dit gebruiken of je kunt body-parser proberen om een speciaal element uit de verzoekparameters te ontleden.


Antwoord 17

Express specifieke eenvoudige manieren om op te halen

  1. zoekreeksen (na ‘?’) zoals https://…?user=abc&id=123

    var express = vereisen(‘express’);

    var app = express();
     app.get('/', function(req, res){
         res.send('id: ' + req.query.id);
     });
     app.listen(3000);
    
  2. zoekparameters zoals https://…/get/users/:id

    var express = vereisen(‘express’);
    var app = express();

    app.get('/get/users/:id', function(req, res){
         res.send('id: ' + req.params.id);
     });
     app.listen(3000);
    

Antwoord 18

Er zijn hier veel antwoorden met betrekking tot toegang tot de query met behulp van request.query, maar geen enkele heeft het type eigenaardigheid genoemd. Het type querytekenreeks kan een tekenreeks of een array zijn en dit type wordt beheerd door de gebruiker.

Bijvoorbeeld met de volgende code:

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);

Als u /?name=bobaanvraagt, wordt Your name is 3 characters longgeretourneerd, maar als u /?name=bob&name=janeaanvraagt, wordt return Your name is 2 characters longomdat de parameter nu een array is ['bob', 'jane'].

Express biedt 2 query-parsers: eenvoudig en uitgebreid, beide geven u een string of een array. In plaats van een methode te controleren op mogelijke bijwerkingen of typen valideren, denk ik persoonlijk dat je de parser moet overschrijven om een consistent type te hebben: alle arrays of alle strings.

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);

Antwoord 19

Er zijn dus twee manieren waarop deze “id” kan worden ontvangen:
1) params gebruiken: de codeparams zien er ongeveer zo uit:
Stel dat we een array hebben,

const courses = [{
    id: 1,
    name: 'Mathematics'
},
{
    id: 2,
    name: 'History'
}
];

Dan voor params kunnen we iets doen als:

app.get('/api/posts/:id',(req,res)=>{
    const course = courses.find(o=>o.id == (req.params.id))
    res.send(course);
});

2) Een andere methode is om queryparameters te gebruiken.
Dus de URL ziet er zoiets uit als “….. \ api \ xyz? id = 1” waar “? id = 1” is het query-onderdeel. In dit geval kunnen we iets doen als:

app.get('/api/posts',(req,res)=>{
    const course = courses.find(o=>o.id == (req.query.id))
    res.send(course);
});

20

U kunt URL-module gebruiken om parameters te verzamelen met behulp van URL.parse

var url = require('url');
var url_data = url.parse(request.url, true);
var query = url_data.query;

In ExpressJs is het gedaan door,

var id = req.query.id;

bijvoorbeeld:

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
});

21

Als u ooit GETverzoek om een ​​IPen een Domain(andere antwoorden niet vermeld, vermeldt u niet portvariabele), u kunt gebruik maken van deze functie:

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);
    });
}

Mis de vereiste modules bovenaan uw bestand niet:

http = require("http");
url = require('url')

Houd er ook rekening mee dat u de module httpskunt gebruiken voor communicatie via beveiligde domeinen en ssl. dus deze twee regels zouden veranderen:

https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......

Antwoord 22

Als je express wilt vermijden, gebruik dan dit voorbeeld:

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); 

gebruik:

curl http://localhost:3000?user_name=user1

door yl


Antwoord 23

Ik gebruik MEANJS 0.6.0met [email protected], het is goed

Klant:

Controller:

var input = { keyword: vm.keyword };
ProductAPi.getOrder(input)

diensten:

this.getOrder = function (input) {return $http.get('/api/order', { params: input });};

Server

routes

app.route('/api/order').get(products.order);

controller

exports.order = function (req, res) {
  var keyword = req.query.keyword
  ...

Other episodes