我正在尝试根据 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
我怎么解决这个问题?非常感谢您提前。
我找到了使用查询字符串而不是多个路由参数的答案。
处理搜索按钮的函数:
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] 删除。
我来说两句