1
votes

Qu'est-ce que cela signifie lorsqu'une valeur est passée par une fonction suivante?

J'ai parcouru du code en ligne pour créer une application React to-do qui utilise un backend Express. Le lien vers le site Web est ici , et je suis tombé sur cette partie de le code:

app.get("/todos", async (req, res, next) => {
  try {
    const todos = await db.Todo.find({});
    return success(res, todos);
  } catch (err) {
    next({ status: 400, message: "failed to get todos" });
  }
});

Je sais que la fonction suivante est une fonction qui transmet l'opération de la fonction middleware actuelle dans laquelle elle se trouve à la fonction middleware suivante de la même route. Cependant, les sources en ligne utilisent simplement la simple fonction "next ()", mais ce code a une valeur, un objet, qui est passé à la fonction suivante.

Qu'est-ce que cela signifie?


0 commentaires

3 Réponses :


0
votes

Cela semble être une convention de dénomination dans Node.js, utilisée pour contrôler la prochaine route correspondante.

Ce truc est fréquemment trouvé, également très pratique, et principalement utilisé dans les contrôles d'accès ou les routes génériques. ( / user /: id )

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    // this route requires auth, check if logged in. If not, redirect to login.
    if (!store.getters.isLoggedIn) {
      next({
        path: `/${ViewName.UserLogin}`,
        query: { redirect: to.fullPath }
      });
    } else {
      next();
    }
  }


2 commentaires

Si c'est une convention de dénomination qui est utilisée pour contrôler la prochaine route correspondante, que font les valeurs "status" et "message" dans mon exemple?


Le "statut" et le "message" dans votre exemple sont l'objet de requête, définissant un code de réponse dans "statut" et son message dans "message". Donc, next (), vous redirigera toujours vers la route mais vous donnant cet objet de réponse qui empêchera l'utilisateur de voir le contenu des routes



0
votes

De la documentation express:

À partir d'Express 5, les fonctions middleware qui renvoient une promesse appelleront next (value) lorsqu'elles rejettent ou génèrent une erreur. next sera appelé avec la valeur rejetée ou l'erreur renvoyée.

Il me semble donc que la valeur à l'intérieur de la fonction next () est la valeur de retour qui est envoyée au prochain rappel. Souvent, vous ne voulez pas envoyer de valeur personnalisée et simplement passer à la fonction middleware suivante, mais dans ce cas, ils voulaient apparemment définir le message d'erreur à l'intérieur de la fonction next () et remplacer ainsi les valeurs par défaut.

J'espère que cela vous aidera


0 commentaires

1
votes

ce code a une valeur, un objet, qui est passé dans la fonction suivante. Qu'est-ce que cela signifie?

Réponse: Cela signifie que vous passez un objet en tant que paramètre à la fonction middleware suivante.

app.use((err, req, res, next) => {
  return res.status(err.status || 400).json({
    status: err.status || 400,
    message: err.message || "there was an error processing request"
  });
});

Ici Le paramètre err est l'objet que vous avez transmis.

J'espère que cela vous aidera


0 commentaires