Chargement Node.js les modules de façon dynamique en fonction de l'itinéraire
Je suis en train de faire un projet dans Node.js avec express. Voici ma structure de répertoire:
root
|-start.js
|-server.js
|-lib/
| api/
| user_getDetails.js
| user_register.js
La lib/api/
répertoire a un certain nombre de JS fichiers relatifs à l'API. Ce que je dois faire est de faire une sorte de système d'accrochage, qu'à chaque fois que l'une des fonctions de l'API obtient demandé de l'express serveur HTTP, il n'quelle que soit l'action est spécifiée dans la fonction de l'API du gestionnaire. C'est probablement source de confusion, mais j'espère que vous obtenez l'idée.
- Larry envoie la demande par la POSTE pour obtenir les détails de l'utilisateur.
- Serveur dans
lib/api
pour trouver la fonction associée à cette demande. - Serveur carrys de l'action et envoie des données en retour de Larry.
J'espère que vous pourrez m'aider. Je pensais qu'il pourrait être fait à l'aide de prototypes, pas sûr cependant.
Merci!
Je ne suis pas sûr de comprendre. Il vous suffit de faire
Je veux qu'il se charge dynamiquement. C'est, si j'ajoute une nouvelle fonction de l'API, je n'ai pas manuellement l'exigent. Mais je ne suis pas sûr de la façon de les accomplir.
Donc, vous voulez un chargeur automatique?
Dynamique de script côté serveur? Cela ne sonne pas bien. :/ Tu sais, il y a une raison pourquoi les solutions classiques sont appelés les classique. 🙂 Mais si vous savez ce que vous faites, puis le chargement des fichiers est juste une question de travail avec
Ouais, mais je ne suis pas sûr de la façon d'injecter du code dans le serveur achemine les requêtes.
var m = require('./lib/api/user_getDetails.js')
et utiliser ce module dans votre réponse. Ai-je raté quelque chose?Je veux qu'il se charge dynamiquement. C'est, si j'ajoute une nouvelle fonction de l'API, je n'ai pas manuellement l'exigent. Mais je ne suis pas sûr de la façon de les accomplir.
Donc, vous voulez un chargeur automatique?
Dynamique de script côté serveur? Cela ne sonne pas bien. :/ Tu sais, il y a une raison pourquoi les solutions classiques sont appelés les classique. 🙂 Mais si vous savez ce que vous faites, puis le chargement des fichiers est juste une question de travail avec
require('fs')
. Voir la documentation: nodejs.org/api/fs.htmlOuais, mais je ne suis pas sûr de la façon d'injecter du code dans le serveur achemine les requêtes.
OriginalL'auteur | 2012-06-06
Vous devez vous connecter pour publier un commentaire.
Si vous savez où vos scripts, c'est à dire que vous avez un répertoire initial, par exemple
DIR
, alors vous pouvez travailler avecfs
, par exemple:server.js
Maintenant vos scripts, vous devez suivre la structure suivante (en raison de la
require(path)(module_holder)
ligne), par exemple:user_getDetails.js
et maintenant, lors du traitement d'une demande, vous ne:
Cela devrait se charger de tous vos modules à
module_holder
variable. Je n'ai pas testé, mais ça devrait fonctionner (sauf pour l'erreur de manipulation!!!). Vous pouvez modifier cette fonction (par exemple faire de l'module_holder
un arbre, pas un seul niveau de dictionnaire), mais je pense que vous saisissez l'idée.Cette fonction doit charger une fois par démarrage du serveur (si vous avez besoin de tirer plus souvent, alors vous êtes probablement traiter avec dynamique de script côté serveur et c'est un baaaaaad idée, à mon humble avis). La seule chose dont vous avez besoin maintenant est d'exporter
module_holder
objet, de sorte que chaque vue gestionnaire peut l'utiliser.fs.lstatSync
etfs.readdirSync
. Aussi vous empêche d'avaler des erreurs, car les exceptions seront jetés, au lieu de les erreurs du passé pour les rappels et alors ignorée.Vrai. En quelque sorte je me suis habitué à la programmation asynchrone et ne pensez plus en mode synchrone, hehe. 🙂 En passant, vous avez supprimé mon
try{ }catch{ }
bloc. En effet, il n'est pas nécessaire ici, car le script continuera à fonctionner même si le module déclenche une exception. Mais ce n'est plus vrai pour les versions synchrones!Grande réponse, mais je suis toujours confus sur la façon de rendre le serveur utilisent les modules... Une solution idéale serait d'une certaine façon utiliser un prototype de système à base de je peux prolonger (si cela fait sens). Quel que soit le script charges devriez avoir quelque chose comme
Hook.add("user_getDetails"); Hook.user_getDetails.action = function() { console.log("user_getDetails method invoked!") };
quelque Chose comme ça, mais je n'ai aucune idée de comment cela pourrait fonctionner 😛Pas de problème. Dans vos scripts de définir des fonctions, par exemple
module.exports = function(modules) { modules["user_getDetails"] = 'test'; };
et dans mon loader au lieu demodules[path]=m;
nerequire(path)(modules);
. Maintenantmodules
objet contient exactement ce que vous voulez. L'inconvénient, c'est que vous avez besoin de tous vos scripts à suivre le même format.Ce qui se fait sur le serveur alors? C'est tellement confus pour moi :/
OriginalL'auteur freakish
app.js
html.js
de la dynamisation de ce code un peu, vous pouvez faire de la magie des choses 😀
vous avez raison @zephyr
OriginalL'auteur ZiTAL
Voici un exemple d'une API REST service web qui charge dynamiquement le gestionnaire de fichier js basé sur l'url envoyée au serveur:
server.js
router.js
index.js
gestionnaires dans mon cas, sont dans un sous-dossier /TrainerCentral, de sorte que la cartographie fonctionne comme ceci:
localhost:8080/TrainerCentral/Recette de carte de fichier js /TrainerCentral/Recipe.js
localhost:8080/TrainerCentral/Entraînement de la carte de fichier js /TrainerCentral/Workout.js
voici un exemple de gestionnaire qui peuvent gérer chacun des 4 principales HTTP actions de récupération, de l'insertion, de mise à jour et suppression de données.
/TrainerCentral/Workout.js
démarrer le serveur en ligne de commande avec "nœud index.js"
Amusez-vous!
../../../
juste un exemple pour les gens qui cherchent à savoir comment le faire. Doit certainement être trempé.
Je dois être prudent, certaines personnes littéralement copier et coller le code à partir de ce site xD espérons qu'ils vont lire ces commentaires et regarder dans la traversée de répertoires des vulnérabilités. -toux - parler à vous, lecteur. oui, vous. o_o
OriginalL'auteur JJ_Coder4Hire