Quali sono i parametri "res" e "req" nelle funzioni Express?


183

Nella seguente funzione Express:

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

Cosa sono reqe res? Cosa rappresentano, cosa significano e cosa fanno?

Grazie!


1
req== "request"// res=="response"
nilon

Risposte:


270

reqè un oggetto contenente informazioni sulla richiesta HTTP che ha generato l'evento. In risposta a req, si utilizza resper inviare indietro la risposta HTTP desiderata.

Quei parametri possono essere nominati qualunque cosa. È possibile modificare questo codice in questo se è più chiaro:

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

Modificare:

Supponi di avere questo metodo:

app.get('/people.json', function(request, response) { });

La richiesta sarà un oggetto con proprietà come queste (solo per citarne alcuni):

  • request.url, che sarà "/people.json"quando viene attivata questa particolare azione
  • request.method, che sarà "GET"in questo caso, da qui la app.get()chiamata.
  • Una matrice di intestazioni HTTP request.headers, contenente elementi come request.headers.accept, che è possibile utilizzare per determinare quale tipo di browser ha effettuato la richiesta, che tipo di risposte è in grado di gestire, se è in grado di comprendere la compressione HTTP, ecc.
  • Un array di parametri della stringa di query, se presenti, in request.query(ad es. /people.json?foo=barPorterebbe a request.query.foocontenere la stringa "bar").

Per rispondere a tale richiesta, utilizzare l'oggetto response per creare la propria risposta. Per espandere l' people.jsonesempio:

app.get('/people.json', function(request, response) {
  // We want to set the content-type header so that the browser understands
  //  the content of the response.
  response.contentType('application/json');

  // Normally, the data is fetched from a database, but we can cheat:
  var people = [
    { name: 'Dave', location: 'Atlanta' },
    { name: 'Santa Claus', location: 'North Pole' },
    { name: 'Man in the Moon', location: 'The Moon' }
  ];

  // Since the request is for a JSON representation of the people, we
  //  should JSON serialize them. The built-in JSON.stringify() function
  //  does that.
  var peopleJSON = JSON.stringify(people);

  // Now, we can use the response object's send method to push that string
  //  of people JSON back to the browser in response to this request:
  response.send(peopleJSON);
});

1
puoi usare curl per vedere la risposta completa di header
generalhenry

3
Potresti voler dare un'occhiata: en.wikipedia.org/wiki/Hypertext_Transfer_Protocol . Non essendo snarky, questo è qualcosa che tutti noi che sviluppiamo per il Web devono sapere!
TK-421,

7
Sì, questo è stato fantastico dovrebbe essere sulla pagina principale del sito Web express.js.
Anton,

expressnoob - response è un oggetto, proprio come l'oggetto richiesta, ma contiene campi e metodi relativi alla risposta. Normalmente viene utilizzato il metodo send () della risposta. send () accetta un sacco di tipi diversi per il primo argomento, che diventa il corpo della risposta HTTP e il secondo argomento è il codice di risposta HTTP.
grantwparks,

7
Se qualcuno è alla ricerca di dettagli di reqe resla struttura, è descritto nei documenti espressi: req: expressjs.com/en/api.html#req , res: expressjs.com/en/api.html#res
akn

25

Ho notato un errore nella risposta di Dave Ward (forse una recente modifica?): I parametri della stringa di query sono presenti request.query, no request.params. (Vedi https://stackoverflow.com/a/6913287/166530 )

request.params per impostazione predefinita viene riempito con il valore di qualsiasi "corrispondenza componente" nelle route, ad es

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

e, se hai configurato express per usare il suo bodyparser ( app.use(express.bodyParser());) anche con i formdata POST. (Vedi Come recuperare i parametri della query POST? )


6

Richiesta e risposta.

Per capire req, prova console.log(req);.


3
Questo non aiuta; l'output nella console è [oggetto oggetto].
JEC

Se vuoi json, devi: console.log (JSON.Stringify (req.body);
maridob,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.