Express结合MongoDB如何通过firstName和lastName同时查询用户数据
实现双条件查询的两种方案
方案1:通过路由路径参数传递两个字段
修改路由规则,同时在路径中携带firstName和lastName两个参数,查询条件直接传入两个字段匹配即可:
// 路由改为携带两个参数,用/分隔 router.get('/:firstname/:lastname' , async (req, res)=>{ try{ // findOne传入两个查询条件,同时匹配firstName和lastName const user = await User.findOne({ "firstName" : req.params.firstname, "lastName" : req.params.lastname }) // 补充空值判断逻辑更严谨 if(!user) return res.status(404).json({message: "未找到匹配的用户"}) res.status(200).json({person : user}) }catch(e){ return res.status(500).json({message : e.message}) } })
调用的时候请求路径格式为 GET /xxx/张三/李四 即可,其中xxx是你路由的公共前缀。
方案2:通过查询参数传递(更灵活,支持扩展更多查询条件)
如果后续可能会加更多查询条件,推荐用查询参数传值,不需要修改路由规则:
router.get('/search' , async (req, res)=>{ try{ // 从query中取参数,兼容性更好 const { firstname, lastname } = req.query // 先判断必填参数是否存在 if(!firstname || !lastname) return res.status(400).json({message: "firstname和lastname为必填查询参数"}) const user = await User.findOne({ firstName: firstname, lastName: lastname }) if(!user) return res.status(404).json({message: "未找到匹配的用户"}) res.status(200).json({person : user}) }catch(e){ return res.status(500).json({message : e.message}) } })
调用的时候请求路径格式为 GET /xxx/search?firstname=张三&lastname=李四 即可。
小提示:原代码中返回状态码用了201,201一般用于资源创建成功的场景,查询接口用200更符合HTTP状态码规范,上面的示例已经做了调整。
内容的提问来源于stack exchange,提问作者Kevin Su
相关产品推荐
相关产品推荐

