Express(v3)アプリがあり、(理想的なシナリオでは)ユーザーが入力フィールドに文字列を入力し、オートコンプリート関数が文字列に一致するリストを返すのを待って、そのリストから選択し、それによって「id」を追加します。隠しフィールドへの値。[実行]をクリックすると、リクエストはクエリを使用してこのエンドポイントにルーティングされます。
app.get('/predict', function(req, res) {
// req.query should be something like
// { name: "wat", id: 123 }
res.render('predictions');
}
この機能を少し変更して、req.query.idが空の場合(つまり、ユーザーがオートコンプリートを待たなかった場合)、「オートコンプリートを待ってください」とリダイレクトする必要がないようにします。
私の考えでは、上記のエンドポイントを拡張して、次のようなことをしたいと思います
app.get('/predict', function(req, res) {
// req.query is { name: 'wat', id: '' }
if(req.query.id=='') {
// then the user didn't wait for the autocomplete, so
// guess the id ourselves
} else {
// ... some code
res.render('predictions');
}
}
自分でIDを推測する際に、オートコンプリート関数に使用するのと同じ外部APIを使用しています。このAPIは、クエリパラメーターに基づいて信頼値を含む結果の配列を返します。つまり、結果が希望どおりであると考える可能性があります。
次に、質問に移ります。このようなことはできますか?
app.get('/predict', function(req, res) {
// req.query is { name: 'wat', id: '' }
if (req.query.id=='') {
makeRequestToAPIWithQuery(req.query.name, function(err, suggestions) {
// suggestions[0] should contain my 'best match'
var bestMatchName = suggestions[0].name;
var bestMatchId = suggestions[0].id;
// I want to redirect back to *this* endpoint, but with different query parameters
res.redirect('/predict?name='+bestMatchName+'&id='+bestMatchId);
}
} else {
// some code
res.render('predictions');
}
}
req.query.idが空の場合、サーバーがサーバーに対して別の要求を行うようにします。したがって、リダイレクト後、req.query.idは空であってはならず、resは必要に応じて「予測」ビューをレンダリングします。
これは可能/賢明/安全ですか?私は何かが足りないのですか?
よろしくお願いします。