Express接口按查询参数筛选时如何返回所有匹配对象而非首个
问题原因
你当前代码仅返回第一个匹配结果,是因为使用了JavaScript数组的find()方法,该方法逻辑为找到第一个符合条件的元素后就终止遍历,直接返回该元素。要返回所有符合条件的元素,替换为filter()方法即可,该方法会遍历整个数组,返回包含所有匹配元素的新数组。
修改后代码
app.get("/movies", (req, res) => { // 初始化结果为全量电影列表 let filteredMovies = movies; // 按标题过滤 if (req.query.title) { filteredMovies = filteredMovies.filter(movie => movie.title === req.query.title); } // 按演员过滤 if (req.query.actor) { filteredMovies = filteredMovies.filter(movie => movie.actor === req.query.actor); } // 按导演过滤 if (req.query.director) { filteredMovies = filteredMovies.filter(movie => movie.director === req.query.director); } // 新增按类型过滤,支持genre参数查询 if (req.query.genre) { filteredMovies = filteredMovies.filter(movie => movie.genre === req.query.genre); } res.json(filteredMovies); });
效果说明
请求http://localhost:8081/movies?actor=Orlando时,会返回符合JSON规范的数组结果:
[ { "title": "Lord of the Rings", "actor": "Orlando", "genre": "adventure", "director": "person" }, { "title": "Pirates of the Caribbean", "actor": "Orlando", "genre": "adventure", "director": "person" } ]
同时该代码天然支持多条件叠加过滤,比如请求?actor=Christian Bale&genre=adventure会返回同时满足两个条件的所有电影。
内容的提问来源于stack exchange,提问作者Jop
相关产品推荐
相关产品推荐

