Node.js+Express项目调用find()报错:products.find is not a function
解决Express中调用
products.find()时报错“products.find is not a function”的问题 错误原因
你的products.json是一个包含products数组的顶层对象,但你解析后直接把整个对象赋值给了products变量。find()是数组专属方法,对象没有这个方法,因此触发报错。
修复方案
两种简单的修复方式任选其一:
方式1:解构赋值直接获取数组
修改JSON解析代码,通过解构取出内部的products数组:
import express from "express"; import fs from 'fs' import bodyParser from "body-parser"; const app = express() // 解构获取products数组 const { products } = JSON.parse(fs.readFileSync('products.json')) app.get('/products', (req, res) => { res.json(products) }) app.get('/products/:id', (req, res) => { const id = parseInt(req.params.id) const product = products.find(p => p.id === id) res.json(product) })
方式2:调用对象内的数组属性
如果不想修改变量名,在调用find()时明确指定对象内的数组:
import express from "express"; import fs from 'fs' import bodyParser from "body-parser"; const app = express() const products = JSON.parse(fs.readFileSync('products.json')) app.get('/products', (req, res) => { res.json(products.products) }) app.get('/products/:id', (req, res) => { const id = parseInt(req.params.id) // 调用对象内的products数组的find方法 const product = products.products.find(p => p.id === id) res.json(product) })
额外提示
遇到这类数据类型不匹配的问题时,可先通过console.log(typeof products)打印变量类型,快速定位结构问题。
内容的提问来源于stack exchange,提问作者Jagannath Samantra
相关产品推荐
相关产品推荐

