J'ai le code suivant avec getOffsetCustom en fonction de getCursor. Je peux accéder à la fois à getOffsetCustom et getCursor en tant qu'exportations, mais je ne sais pas comment avoir le getCursor à l'intérieur de getOffsetCustom.

J'utilise ce fichier pour exécuter le nœud sans et construire le système. Est-ce la meilleure façon d'exposer les fonctions utilitaires ?

module.exports = {
  getCursor: (rec) => Buffer.from(rec.toString()).toString("base64"),
  getOffsetCustom: (data, afterCursor) => {
    const offsetBasedOnFind = data.findIndex(
      (rec) => getCursor(rec.id) === afterCursor
    );
    return offsetBasedOnFind === -1 ? 0 : offsetBasedOnFind + 1;
  },
};
0
Pete 11 nov. 2020 à 00:02

1 réponse

Meilleure réponse

Trois approches :

  • Référencez simplement module.exports :

    module.exports = {
      getCursor: (rec) => Buffer.from(rec.toString()).toString("base64"),
      getOffsetCustom: (data, afterCursor) => {
        const offsetBasedOnFind = data.findIndex(rec =>
          module.exports.getCursor(rec.id) === afterCursor
    //    ^^^^^^^^^^^^^^^
        );
        return offsetBasedOnFind === -1 ? 0 : offsetBasedOnFind + 1;
      },
    };
    
  • Utilisez des méthodes (au lieu de fonctions fléchées) et this :

    module.exports = {
      getCursor(rec) {
        return Buffer.from(rec.toString()).toString("base64");
      },
      getOffsetCustom (data, afterCursor) {
        const offsetBasedOnFind = data.findIndex(rec =>
          this.getCursor(rec.id) === afterCursor
    //    ^^^^^
        );
        return offsetBasedOnFind === -1 ? 0 : offsetBasedOnFind + 1;
      },
    };
    

    Cela nécessite cependant que la méthode soit toujours appelée sur l'objet module, donc par exemple, vous ne pouvez pas utiliser la déstructuration sur l'importation.

  • Déclarez les fonctions normales, puis exportez-les. Ce serait l'approche privilégiée :

    function getCursor(rec) {
      return Buffer.from(rec.toString()).toString("base64");
    }
    function getOffsetCustom (data, afterCursor) {
      const offsetBasedOnFind = data.findIndex(rec =>
        getCursor(rec.id) === afterCursor
      );
      return offsetBasedOnFind === -1 ? 0 : offsetBasedOnFind + 1;
    }
    Object.assign(exports, {
      getCursor,
      getOffsetCustom,
    });
    

    Le seul inconvénient (ou avantage ?) ici est que les exportations ne peuvent pas être corrigées/moquées de l'extérieur, getOffsetCustom fera toujours référence au getCursor local.

1
Bergi 10 nov. 2020 à 21:12