我有一个 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 相同,该 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 将根据需要呈现我的“预测”视图。
这可能/明智/安全吗?我错过了什么吗?
提前非常感谢。