【发布时间】:2020-05-22 00:22:00
【问题描述】:
在我的 Node JS 服务器中,我有这个路由处理程序,它向第三方 API 发送请求以获取用户名:
app.get('/players/:player', apiLimiter, function(request, response) {
const player = request.params.player;
const api_url = `https://api.com/shards/steam/players?filter[playerNames]=${player}`;
var options = {
method: "GET",
observe: 'body',
};
let apiRequest = https.request(api_url, options, function (res) {
let data = "";
res.on("data", chunk => {
data += chunk;
})
res.on("end", () => {
let objectParsed = JSON.parse(JSON.stringify(data));
response.send(objectParsed);
})
if(!player) {
res.status(404).send("Not found.");
}
})
apiRequest.end();
})
这可以很好地获取存在的用户。但是,如果我在 /players 页面中输入假用户名,该页面仍会以 200 状态加载,而不是收到 404 响应。该页面加载并看起来很损坏,因为它实际上没有从 API 获取任何数据。
我觉得这是一个愚蠢的问题.. 在我的研究中,我发现如果它只是路径,而不是依赖于路径参数的路径,例如 /players/:player ,如何处理错误
我发现了一个与我的问题相似的问题 (How to throw a 404 error in express.js?),我尝试使用 If 语句:if (!player){res.status(404).send("Not found."); } 但没有骰子。我在错误的地方使用了这个 if 语句吗?
如果数据库中的用户不存在,如何让我的 Node JS 服务器响应 404?
【问题讨论】:
-
它按照代码工作。乍一看,您已经将 player 的值分配给了变量,但是您没有在任何地方检查该播放器是否可用。这就是为什么值仍然通过 get 请求而您没有收到 404 错误的原因。因为您只检查
!player,但根据您的代码,您将始终获得播放器。 -
当您输入假名时,
request.params.player实际包含什么?正如@JuhilSomaiya 所说,即使这是一个错误,它仍可能在request.params.player中返回某种值。因此,当您检查!player时,它仍然会返回 true。因此,除非该值为空、null 或 false,否则它将返回 true。
标签: javascript node.js express error-handling http-status-code-404