678 Stimmen

Wie greife ich auf die GET-Parameter nach "?" in Express zu?

Ich weiß, wie man die Parameter für Abfragen wie diese erhält:

app.get('/beispiel/:id', routes.beispiel);

In diesem Fall kann ich req.params.id verwenden, um den Parameter (z.B. 2 in /beispiel/2) zu erhalten.

Wie kann ich jedoch auf die Variable color für URLs wie /beispiel/2?color=red zugreifen?

Ich habe req.params.color ausprobiert, aber es hat nicht funktioniert.

18voto

Jan Biasi Punkte 187

Das Express-Handbuch besagt, dass Sie req.query verwenden sollten, um auf die Query-String zuzugreifen.

// Anforderung von /display/post?size=small
app.get('/display/post', function(req, res, next) {

  var isSmall = req.query.size === 'small'; // > true
  // ...

});

7voto

seme Punkte 97
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("Benutzername = "+userName+", Job-Name : "+jobName)
  addUser(userName, jobName)
    .then((result) => {
      res.status(200).json(result)
    })
    .catch((error) => {
      res.status(404).json({ 'Nachricht': error.toString() })
    })
})
app.post('/users/add', (request, response) => {
  const { userName, job } = request.body
  addTeam(userName, job)
  .then((user) => {
    response.status(200).json({
      "Benutzername": user.name,
      "Stadt": 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('Beispiel-App hört auf Port 3000!')
)

6voto

MD. RAKIB HASAN Punkte 3327

Sie können ganz einfach req.query verwenden, um Abfrageparameter zu erhalten:

app.get('/', (req, res) => {
    let color1 = req.query.color1
    let color2 = req.query.color2
})

Das url-Modul bietet Dienstprogramme zur URL-Auflösung und -Analyse. URL analysieren ohne Express zu verwenden:

const url = require('url');
const queryString = require('querystring');

let rawUrl = 'https://stackoverflow.com/?page=2&size=3';

let parsedUrl = url.parse(rawUrl);
let parse = queryString.parse(parsedUrl.query);

// parse = { page: '2', size: '3' }

Ein weiterer Weg:

const url = require('url');

app.get('/', (req, res) => {
  const queryObject = url.parse(req.url,true).query;
});

url.parse(req.url,true).query gibt { color1: 'red', color2: 'green' } zurück.
url.parse(req.url,true).host gibt 'localhost:8080' zurück.
url.parse(req.url,true).search gibt '?color1=red&color2=green' zurück.

4voto

cyberfrogg Punkte 116

Nutzen Sie einfach das app.get:

app.get('/some/page/here', (req, res) => {
    console.log(req.query.color) // Ihr Farbwert wird angezeigt
})

Sie können es in der expressjs.com Dokumentations-API sehen: http://expressjs.com/de/api.html

3voto

Lee Brindley Punkte 6586

Eine schöne Technik, die ich bei einigen meiner Apps auf Express begonnen habe zu verwenden, besteht darin, ein Objekt zu erstellen, das die Abfrage-, Parameter- und Body-Felder des Express-Anfrageobjekts zusammenführt.

//./express-data.js
const _ = require("lodash");

class ExpressData {

    /*
    * @param {Object} req - Express-Anfrageobjekt
    */
    constructor (req) {

        //Alle vom Client übergebenen Daten in der Anfrage zusammenführen
        this.props = _.merge(req.body, req.params, req.query);
     }

}

module.exports = ExpressData;

Dann können Sie beispielsweise in Ihrem Controller oder an anderer Stelle im Umfang der Express-Anfragekette etwas Ähnliches verwenden:

//./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;

    //Angenommen, die Anfrage lautet "/592363122?foo=bar&hello=world"
    //das folgende würde ausgeben
    //{
    //   some_id: 592363122,
    //   foo: 'bar',
    //   hello: 'world'
    //}
    console.log(props);

    return res.json(props);
});

Das macht es schön und praktisch, einfach in alle "benutzerdefinierten Daten" abzutauchen, die ein Benutzer mit seiner Anfrage gesendet haben könnte.

Hinweis

Warum das 'props' Feld? Da dies ein gekürztes Beispiel war, verwende ich diese Technik in einer Reihe meiner APIs, ich speichere auch Authentifizierungs- / Autorisierungsdaten auf diesem Objekt, wie im folgenden Beispiel.

/*
 * @param {Object} req - Anfrage-Antwort-Objekt
*/
class ExpressData {

    /*
    * @param {Object} req - Express-Anfrageobjekt
    */
    constructor (req) {

        //Alle vom Client übergebenen Daten in der Anfrage zusammenführen
        this.props = _.merge(req.body, req.params, req.query);

        //Verweis auf den Benutzer speichern
        this.user = req.user || null;

        //API-verbundene Geräte (Mobile App..) senden x-client-Header mit Anfragen, Webkontext ist impliziert.
        //Dies wird verwendet, um zu bestimmen, wie der Benutzer mit der API verbunden ist
        this.client = (req.headers) ? (req.headers["x-client"] || (req.client || "web")) : "web";
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X