0
votes

Erreur lors de passer plusieurs paramètres d'itinéraire dans un chemin d'URL

J'essaie d'aller chercher des données en fonction de la valeur de 3 champs ("NKK", "NIK" et "NAMA").

VOTED-CTRL: P>

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


2 commentaires

Où obtenez-vous l'erreur?


Ce n'est pas une erreur, en fait. Ce que l'utilisateur essaie de faire est de trouver les données sur la base de données en fonction de plusieurs paramètres. Mais, il y aura un cas où l'un des paramètres n'est pas entré par l'utilisateur dans le texte d'entrée, ce qui signifie que l'utilisateur souhaite trouver toutes les données dans tous les champs non saisis / paramètres non spécifiés correspondant aux paramètres entrés / spécifiés.


3 Réponses :


0
votes

Dans votre cas lorsque l'une des valeurs peut être non définie ou vide, vous devez transmettre toutes ces valeurs dans String de requête plutôt que des parties de la route. String de requête vous donne une possibilité de ne pas passer des valeurs seulement.

Lire req.Query Documentation Pour obtenir une idée de la lecture de ces valeurs de la chaîne de requête.


1 commentaires

Merci de votre aide. Je le combine avec des opérateurs ternaires tels que ceci: voter.find ({nkk: nkk.length> 0? Nkk: {$ existe: true}, Nik: Nik.length> 0? Nik: {$ Existe: vrai }, NAMA: nama.length> 0? NAMA: {$ existe: true}}, (err, électeurs) => , et cela fonctionne parfaitement.



0
votes

Utiliser les paramètres de l'URL comme vous êtes (c'est-à-dire avec req.params code>), vous devez les spécifier dans l'URL comme suit:

// 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 })
   // ...
})


1 commentaires

Merci de votre aide. Je le combine avec des opérateurs ternaires tels que ceci: voter.find ({nkk: nkk.length> 0? Nkk: {$ existe: true}, Nik: Nik.length> 0? Nik: {$ Existe: vrai }, NAMA: nama.length> 0? NAMA: {$ existe: true}}, (err, électeurs) => , et cela fonctionne parfaitement.



0
votes

J'ai trouvé la réponse avec l'utilisation de la chaîne de requête plutôt que dans plusieurs paramètres de route.

fonction qui gère le bouton de recherche: p> xxx pré>

Les données de la charge utile envoient à cette API. Route: p> xxx pré>

Enfin, un getvotersbyparams code> fonction exécuté sur le serveur: p>

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 })
    })


0 commentaires