首页 > 解决方案 > res.json 似乎没有在 nodejs 中显示 json 数据

问题描述

我正在创建基于本地ads.js文件的 API(目前)。

显示所有广告(json)的主 API /api/ads中的 res.json 工作正常,但第二个 API /api/ads/:id中的 res.json似乎没有显示任何内容。

我正在使用 nodemon 运行服务器。

代码如下:

import express from 'express'
import dotenv from 'dotenv'
import ads from './data/ads.js'

dotenv.config()

const app = express()

app.get('/', (req, res) => {
  res.send('API is running...')
})

app.get('/api/ads', (req, res) => {
  res.json(ads)                                          // Works Fine
})

app.get('/api/ads/:id', (req, res) => {
  const ad = ads.find((a) => a._id === req.params.id)    // Is the problem here?
  res.json(ad)                                           // Does not show anything
})

const PORT = process.env.PORT || 5000
const MODE = process.env.NODE_ENV

app.listen(PORT, console.log(`Server running in ${MODE} mode on port ${PORT}`))

这是 ads.js 文件:

const ads = [
  {
    _id: 1,
    img: '/images/feat.webp',
    title: 'Hyundai Tuscon CRDi 2017',
    price: 3000000
  },
  {
    _id: 2,
    img: '/images/innova.jpg',
    title: 'Toyota Innova Crysta 2019',
    price: 1200000
  }
]

export default ads

文件夹结构为:

backend
|--data
|----ads.js
|--server.js
frontend
*more files*
package.json

标签: node.jsjsonexpress

解决方案


req.params将保存一个键值对对象,其中值始终是字符串。这意味着您正在使用严格比较( ===) 将数字类型与字符串进行比较,这显然会返回 false 并导致空ad数组。

您可以尝试将 param-id 转换为数字,然后比较值或使用松散比较运算符(==而不是===,尽管我不推荐这样做):

app.get('/api/ads/:id', (req, res) => {
  const ad = ads.find((a) => a._id === Number.parseInt(req.params.id))   
  res.json(ad)                                           
})

推荐阅读