问题描述
我想使用Express和MongoDB创建Search API,我已经创建了GET,POST,DELETE,UPDATE,但是找不到有关如何使用GET POST等执行搜索的任何信息
我正在发布我的Express API代码,该代码已经具有GET POST DELETE,现在我只想创建类似的Search,请帮帮我。
const express = require('express')
const router = express.Router()
const cors = require('cors')
//Importing Jobs Model
const JobsModel = require('../../models/jobs')
const { find } = require('../../models/jobs')
//POST Req
router.post('/',async (req,res) => {
const newJobPost = new JobsModel(req.body)
try{
const jobPost = await newJobPost.save()
if(!jobPost) throw Error('Error,JobPost Not Saved...!')
res.status(200).json(jobPost)
}catch(err){
res.status(400).json({msg:err})
}
})
//GET All Req
router.get('/',cors(),res) => {
try{
const getJobs = await JobsModel.find()
if(!getJobs) throw Error('Error,No Jobs Found...!')
res.status(200).json(getJobs)
}catch(err){
res.status(400).json({msg:err})
}
})
//GET Single Req
router.get('/:id',res) => {
try{
const getJob = await JobsModel.findById(req.params.id)
if(!getJob) throw Error('Error,Job Not Found...!')
res.status(200).json(getJob)
}catch(err){
res.status(400).json({msg:err})
}
})
//DELETE Req
router.delete('/:id',res) => {
try{
const delJobs = await JobsModel.findByIdAndDelete(req.params.id)
if(!delJobs) throw Error('No Jobs Found to Delete...!')
res.status(200).json({success: true})
}catch(err){
res.status(400).json({msg:err})
}
})
//UPDATE Req
router.patch('/:id',res) => {
try{
const updateJob = await JobsModel.findByIdAndUpdate(req.params.id,req.body)
if(!updateJob) throw Error('Error,No Jobs Found to Update...!')
res.status(200).json({success: true})
}catch(err){
res.status(400).json({msg:err})
}
})
解决方法
创建如下所示的基于查询的GET路由
//GET Search
router.get('search/',cors(),async (req,res) => {
try{
const searchParams = req.query
console.log(searchParams)
const jobs = await JobsModel.find(searchParams)
if(!jobs) throw Error('Error,No Jobs Found...!')
res.status(200).json(jobs)
}catch(err){
res.status(400).json({msg:err})
}
})
现在使用如下所示的参数调用此API
http://localhost/search?name=bob&age=25
您将获得像这样的这些参数
console.log(req.query);
{
"name": "bob","age" : "25"
}
如果您有更多且复杂的过滤器,请创建一个POST路由,并在body
中发送参数,并在猫鼬find
中使用它们