[英]Error passing multiple route parameters in a url path
我正在尝试根据 3 个字段(“nkk”、“nik”和“nama”)的值获取数据。
选民-ctrl:
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
我怎么解决这个问题? 非常感谢您提前。
要按原样使用 URL 参数(即使用req.params
),您需要在 URL 中指定它们,如下所示:
// Browser
fetch(`${apiRoot}/votersby?nkk=${arg1}&nik=${arg3}&nama=${arg3}`)
// Server
router.get(`/votersby`, (req, res) => {
const { nkk, nik, nama } = req.params
console.log({ nkk, nik, nama })
// ...
})
实际上,您应该使用具有不同查询参数的相同端点。
您当前指定它们的方式实际上通常是:
A)ID(如果有一个/:id
B)看起来更像是动态路径(路由)构建,如果在 API 中找不到某些动态生成的路由,您将获得 404。
有关指定参数字符串的更多信息,请参见下文:
我通过使用查询字符串而不是多个路由参数找到了答案。
Function 处理搜索按钮:
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
function:
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 })
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.