8
votes

Comment ajouter Plugin et utiliser un module / fichier externe sur RT

J'ai une application / module de nœud.js qui est Travailler OK avec concept de plug-in, c'est-à-dire

Mon module agit comme un proxy avec des capacités supplémentaires telles que Ajout de nouveaux fonctionnalité à la fonctionnalité hors de la case (méthodes). Pour ce faire, vous devez procéder comme suit:

clone mon application

Créer un nouveau dossier appelé Event (à l'intérieur de mon application)

Dans ce dossier, vous devez fournir deux fichiers

  1. étend.js avec votre logique en tant que fonctions / méthodes
  2. étend.json qui définit votre API (pour savoir quel fichier invoquer)

    Remarque: le nom du fichier JS & JSON doit être identique

    par exemple permet de supposer qu'il s'agit de votre extend.json fichier Xxx

    Dans ce cas lorsque l'utilisateur placé dans le navigateur, le lien suivant

    localhost: 3000 / Run

    im invoquant la fonction runfn (qui existe dans le fichier extension.js) avec sa logique et c'est travail comme prévu (sous la hotte I Lisez les fichiers JSON & JS et appelez la fonction comme extender [fnname] (req, res) );

    maintenant je veux supporter l'utilisation cas d'ajout externe externe via le code Par exemple, que l'utilisateur fera quelque chose comme xxx

    alors lorsque mon module fonctionnera, il existe de nouvelles extenseurs externes existent avec toutes la configuration et, si oui. (aux fichiers JS & JSON).

    Mes questions sont:

    1. J'ai besoin de trouver quand mon module est Démarrage qui est enregistré sur mon module, puis effectuez ma logique sur ce module, comment elle peut être effectuée dans le nœud?

      2.Si il y a une autre solution dans le nœud s'il vous plaît laissez-moi savoir.


2 commentaires

Ce n'est pas clair ce que vous demandez. Votre application est-elle une application express? Est-ce que cela permet à l'utilisateur de définir des itinéraires dans des fichiers séparés? Comment demandez-vous que vous demandez est différent de ce qui est déjà implémenté, à l'exception de la possibilité d'ajouter des dossiers supplémentaires?


Pourriez-vous montrer le code?


3 Réponses :


0
votes

Je crois qu'un routeur simple devrait satisfaire vos exigences: xxx


2 commentaires

Merci mais aussi loin que je comprenne, cela ne vous aidera pas depuis mon proxy inverse est un module contenant des itinéraires ... En outre, je dois invoquer une méthode à l'Usermodule Comment devrais-je faire cela? Pouvez-vous fournir un code de travail complexe comme exemple que je peux utiliser pour tester? Merci encore :)


J'essaie quelque chose comme vous l'avez dit mais ça ne fonctionne pas :(, mais peut-être que quelque chose me manque, merci quand même.



1
votes

Vous pouvez implémenter la fonction d'initialisation de votre API pour donner une liberté aux utilisateurs de modules. Par exemple.

var yourModule = require('yourModule').init({
  extenders: [
    {
      "path": "run",
      "fn": "runFn"
    }
  ]
});

app = require('express')();
app.use(yourModule.getMiddleware());


0 commentaires

1
votes

Si je ne me trompe pas de comprendre votre problème peut-être que cette approche peut vous aider.

Je pense que vous pouvez énumérer vos extenseurs dans une ACL comme JSON, qui incluent non seulement le chemin ou le nom FNName, mais le chemin FLASE_TO_JS ou tout autre propriété dont vous avez besoin, comme s'il s'agit de paramètres actifs ou de sécurité. P>

var Router = {
    extenders: {},
    init: function () {
        this.extenders = {};
        this.loadExtenderFiles();
    },
    loadExtenderFiles: function () {
        var key, extender;
        // Iterate extender files
        for (key in ACL_JSON) {
            // extender load logic
            extender = ACL_JSON[key];
            if (extender.active) {
                this.extenders[extender.fn] = require(extender.file);
            }
        }

    },
    // this fn should allow you to Router.extend() anywhere during the request process
    extend: function (fn, request, response) {
        // Parse request/response to match your extender module pattern
        // extender process logic
        this.extenders[fn](request, response);
    }
};
module.exports = Router;


0 commentaires