在 url 路径中传递多个路由参数时出错

瓦利德·伊布努鲁斯

我正在尝试根据 3 个字段(“nkk”、“nik”和“nama”)的值获取数据。

选民控制:

getVotersByParams = async (req, res) => {
        const nkk = req.params.nkk
        const nik = req.params.nik
        const nama = req.params.nama

    await Voter.find({nkk, nik, nama}, (err, voters) => {
        if (err) {
            return res.status(400).json({ success: false, error: err })
        }
        if (!voters.length) {
            return res
                .status(404)
                .json({ success: false, request: req.params, error: `Voter not found` })
        }
        return res.status(200).json({ success: true, data: voters })
    }
}

有可能其中一两个为空或未由用户定义。问题是当参数之一为空(或未定义)时,在 url 路由中传递多个参数返回“未找到”结果:

选民路由器:

const express = require('express')

const VotersCtrl = require('../controllers/voters-ctrl')

const router = express.Router()

router.get('/votersbyparams/:nkk/:nik/:nama', VotersCtrl.getVotersByParams)

module.exports = router

成功查询结果: 在此处输入图片说明

“nkk”参数为空时的“not found”查询结果: 在此处输入图片说明

我怎么解决这个问题?非常感谢您提前。

瓦利德·伊布努鲁斯

我找到了使用查询字符串而不是多个路由参数的答案。

处理搜索按钮的函数:

const handleFindClick = async () => {
     const payload = { nkk, nik, nama }
     setIsLoading(true)
     const voters = await api.getVotersByParams(payload)
     setVoters(voters.data.data)
     setIsLoading(false)
     console.log(voters)
    }

负载数据发送到这个 api 路由:

export const getVotersByParams = (payload) => api.get(`/votersbyparams nkk=${payload.nkk}&nik=${payload.nik}&nama=${payload.nama}`)

最后,getVotersByParams在服务器中执行函数:

getVotersByParams = async (req, res) => {
    const {nkk, nik, nama} = req.query
    await Voter.find({nkk : nkk.length > 0 ? nkk : {$exists : true}, nik : nik.length > 0 ? nik : {$exists : true}, nama : nama.length > 0 ? nama : {$exists : true}}, (err, voters) => {
        if (err) {
            return res.status(400).json({ success: false, error: err })
        }
        if (!voters.length) {
            return res
                .status(404)
                .json({ success: false, error: `Voter not found` })
        }
        return res.status(200).json({ success: true, data: voters })
    })

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章