[英]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.