You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express不同路径复用相同逻辑时名称查询无返回问题排查

问题定位

你的/pokemons/name/:pokeName接口查不到数据的核心原因是错误复用了id接口的类型转换逻辑,对字符串类型的名称参数做了数字强转:

  • id接口中item.id === +id的写法是正确的:路由参数默认是字符串类型,用一元加号+把字符串id转成数字,刚好和数据源中存储的数字类型id匹配,所以可以正常查询
  • name接口中你写了item.name === +pokeName,这里的+pokeName会把传入的宝可梦名称(字符串)强制转成数字,非纯数字的名称转换结果都是NaN,拿NaN和数据源里的字符串类型name字段做全等比较永远不会成立,自然查不到任何结果
修复方案

移除name查询逻辑里多余的+强转即可,建议额外增加大小写兼容,避免用户传入大小写和数据源不一致时匹配失败:

app.get('/pokemons/name/:pokeName', async (req, res) => {
  const { pokeName } = req.params
  // 移除错误的数字强转,增加大小写不敏感匹配
  const pokemon = allPokemons.pokemon.find((item) => item.name.toLowerCase() === pokeName.toLowerCase())
  try {
    if (!pokemon) {
      res.status(404).send('No pokemon found with this name')
    } else {
      res.json(pokemon)
    }
  } catch (error) {
    res.status(400).json({ error: 'Not found' })
  }
})
额外注意
  • 所有从路由、请求体、查询参数拿到的值默认都是字符串类型,做类型转换前必须先确认目标匹配字段的实际类型,不要直接照搬其他接口的逻辑
  • 字符串匹配场景优先考虑做大小写兼容,能大幅降低用户查询时的无意义报错

内容的提问来源于stack exchange,提问作者Rijad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:45:46