Ich möchte Anfrage Parameter in Middleware-Funktion in Expressjs Rahmen zu behandeln. Um mein Problem zu beschreiben, habe ich ein sehr kleines Arbeitsbeispiel erstellt. Nehmen wir an, ich möchte einen Sprachparameter im Pfad haben und seinen Wert auf den Standardwert ändern, wenn der angegebene Wert falsch ist (nicht unterstützte Sprache). Nehmen wir an, ich unterstütze ‚en‘ und ‚fi‘ nur Sprachen und ich möchte die „lang“ Parameter ‚fi‘ gegeben, wenn der Benutzer etwas setzen anders als [ ‚en‘, ‚fi‘ ].Wie man req Parameter in Middleware Funktion behandelt
tun, dass ich ein unten Stück Code vorbereitet:
const express = require('express');
const app = express();
// MIDDLEWARE FUNTION
function handleLang(req, res, next) {
console.log("from handleLang I see params: "); console.log(req.params)
var supportedLangs = ['en', 'fi']
if (req.params.lang === undefined || (supportedLangs.indexOf(req.params.lang) == -1)) {
console.log("so changing req.params.lang to default...")
req.params.lang = "fi"
console.log("before I leave handleLang I see req.params as: "); console.log(req.params)
}
return next()
}
app.use("/:lang*?", handleLang)
app.get('/:lang*?', function (req, res) {
console.log('from app.get I see following params: '); console.log(req.params)
res.send('index')
})
app.listen(4000,() => {
console.log('Server started....')
})
ich erwartet, dass die die handleLang Funktion wird die lang ändern auf den Standardwert und ich werde das in get-Funktion sehen. Leider habe ich mich geirrt.
Wenn ich http://localhost:4000/xx zu adressieren, sehe ich folgende Ausgabe:
Server started....
from handleLang I see params:
{ '0': '', lang: 'xx' }
so changing req.params.lang to default...
before I leave handleLang I see req.params as:
{ '0': '', lang: 'fi' }
from app.get I see following params:
{ '0': '', lang: 'xx' }
from handleLang I see params:
{ '0': '', lang: 'favicon.ico' }
so changing req.params.lang to default...
before I leave handleLang I see req.params as:
{ '0': '', lang: 'fi' }
from app.get I see following params:
{ '0': '', lang: 'favicon.ico' }
Ich habe keine Ahnung, warum irgendwie req.params.lang zu ‚favicon.ico‘ ändert und ich verstehe nicht, warum Ich sehe dieselbe Nachricht zweimal. Kann mir jemand erklären, warum es passiert und beschreiben, wie es richtig gemacht werden sollte?
danke, das funktioniert, aber hast du eine ahnung wenn ich es irgendwie in req.params stecken kann? – nosbor
Wir können auch einen Weg innerhalb des Problems beschrieben: https://github.com/expressjs/express/issues/2911 –
@nosbor sowieso, bitte beachten Sie, dass dies definitiv die Sprache Header überschreiben würde, wenn es vom Client übergeben wird . Es wäre ein kleiner Prozentsatz, aber das würde definitiv den Header überschreiben, wenn er für etwas anderes als den aktuellen Zweck verwendet würde. – cramopy