node.js - 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
解决方案
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)
})
推荐阅读
- swift - 数据在数组中出现两次 - Swift(SwiftUI)
- vb.net - 从动态文本框中检索动态 sql 参数值的循环问题
- json - 抓取 Amcharts 交互式数据
- r - r 中的一个简单 for 循环来模拟一小组数据,打印结果工作正常,但设置数据集会创建一个只有 2 个条目的数据集
- c++ - CMPXCHG16B 和 MSVC 的实现
不是默认的? - cadence-workflow - 我可以或如何删除 Cadence 工作流域吗?
- node.js - 当我在终端上运行 npm -v 时出现此错误。我该如何解决?
- reactjs - 在子函数中使用过时变量的 useEffect 钩子
- python - 即使在配置之后,通过我的 Django REST 框架 API 获取 CORS 错误
- linux - Gitlab CI 调用 docker install.sh 并始终使用 Sudo 运行指令