expressjsフレームワークのミドルウェア関数でリクエストパラメータを処理したい。私の問題を説明するために、私は非常に小さな作業例を作成しました。与えられた値が間違っている場合(サポートされていない言語の場合)、パスに言語パラメータを設定し、その値をデフォルトに変更したいとしましょう。 「Fiの」、「EN」[よりも、他のユーザー与えどちらかといえば私はと「Fiの」言語(EN)をサポートし、私は「Fiの」に「LANG」パラメータを設定したいのは、仮定しましょう]。私は、コードの以下の部分準備したことを行うにはミドルウェア関数のreqパラメータの扱い方
:
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....')
})
を私はhandleLang機能がデフォルト値にLANGを変更しますと私はget関数でそれを見るだろうと予想しました。残念ながら私は間違っていました。
私はhttp://localhost:4000/xxに対処するために行くとき、私は次の出力を参照してください。
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' }
を私はreq.params.langは何とか「favicon.icoを」に変わり、私は理由を理解していない理由はわかりません私は同じメッセージを2回見る。誰が私にそれがなぜ起こるのかを説明し、それがいかに正しく行われるべきかを記述することができますか?
ありがとう、それは動作しますが、私は何とかreq.paramsに入れることができますか? – nosbor
私は、問題の内部にある方法を使用することもできます。https://github.com/expressjs/express/issues/2911 –
@nosborとにかく、クライアントが渡すと言語ヘッダーが上書きされることに注意してください。小さなパーセンテージになりますが、現在の目的以外の目的に使用される場合は、ヘッダーが確実に上書きされます。 – cramopy