我想使用Express&MongoDB创建Search API

问题描述

我想使用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中使用它们

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...