3
votes

Sous-domaines dynamiques avec angulaire

J'utilise Angular

Pour notre projet, nous avons besoin d'un support multiclient pour les URL avec des sous-domaines.

Nous avons un produit similaire à Slack et chacun de nos locataires (client) a sa propre base de données isolée, nous voulons donc qu'il accède à notre produit via:

client1.myproject.com
client2.myproject.com
client3.myproject.com

etc. Comment faire cela dans Angular? Nous savons que le routage angulaire ne peut changer que le chemin et non le domaine. Est-il même supporté ou pas du tout?

Merci!

PS: C'est la re-pose de ma question précédente qui n'a pas été posée comme elle aurait dû l'être. p>


1 commentaires

alors avez-vous la réponse ?? je veux également implémenter la même fonctionnalité mais avec un sous-domaine dynamique. et comment pouvons-nous l'implémenter dans le projet angular7 @ saad-ashfaq


3 Réponses :


-1
votes

Le routage de schéma par défaut pour Angular est http://example.com/client1 . En raison de la logique du cadre (ou du modèle commercial, comme vous voulez le dire), votre demande est impossible à faire.


1 commentaires

Que recommanderez-vous pour mettre en œuvre une telle chose? Dois-je effectuer un rendu côté serveur? Parce qu'actuellement j'ai une architecture moins serveur.



0
votes

Oui, vous pouvez le faire, nous le faisons. avec des domaines différents mais la même application.

En gros, créez simplement un service de configuration à partir duquel vous obtenez votre ensemble de données par le domaine. Et puis définissez votre application avec la "société" que vous voulez (par domaine).

par exemple:

 constructor() {
        this.currentURL = window.location.href;
        if (this.currentURL.indexOf('company1') >= 0)
            this.setParamsCompany1();
        else if(this.currentURL.indexOf('company2') >= 0)
            this.setParamsCompany2();
    }


5 commentaires

Ok, je comprends la solution. Mais comment puis-je le tester sur mon environnement de développement (localhost). Et deuxième chose. J'ai deux façons d'accéder au sous-domaine. la première consiste à mettre manuellement le nom dans l'URL, par exemple: client1.myapp.com et la deuxième chose à saisir sur la page de connexion, par exemple: myapp.com/signin. Alors devrais-je donner un lien absolu en utilisant window.location.href pour rediriger vers la page si l'utilisateur a confirmé. ou y a-t-il un autre moyen. Et comment le faire sur l'environnement de développement. J'espère que je l'ai expliqué correctement.


Sur votre hôte local, c'est un peu difficile de le tester, mais c'est possible si vous savez comment définir vos hôtes virtuels locaux avec peu de domaines sur l'hôte local: 4200. p.s pas sûr à 100% que cela fonctionne avec angular, je sais que cela fonctionne avec Xammp \ Wamp etc. pour votre deuxième question, ce n'est pas grave. assurez-vous simplement d'utiliser cette configuration pour configurer le reste de l'application après la connexion de l'utilisateur ou à chaque fois que vous en avez besoin.


@SaadAshfaq y a-t-il une raison pour laquelle tu ne me donne pas la réponse ou tu veux juste que les gens répondent et tu t'enfuis.


désolé pour la réponse tardive, j'ai essayé vos suggestions. Ça marche. Mais j'ai du mal à gérer l'état de mon application ainsi que les sessions, car localStorage n'est stocké que pour un domaine spécifique. J'ai découvert différentes solutions (iFrame, etc.) mais rien ne semble fonctionner parfaitement. Je veux savoir comment avez-vous géré ces choses dans votre application Angular. Pouvez-vous me montrer votre travail? P.S: Vous avez été très utile. Merci pour ça. Et puisque ma réputation est inférieure à 15, cela ne change donc pas le score affiché publiquement.


@SaadAshfaq nous créons un service de configuration que nous tirons de tout ce qui est important par client.



5
votes

Pour tester sur l'environnement de développement, vous devez effectuer certains réglages dans votre fichier hôte (C: \ Windows \ System32 \ drivers \ etc \ hosts). Vous pouvez y ajouter une liste de domaines qui pointeront vers votre hôte local et serviront votre application.

ng serve --host client1.myproject.com --port 4200 --open


2 commentaires

Merci pour la suggestion. Puis-je ajouter * .app.com, signifie sous-domaine dynamique dans mes hôtes. ou dois-je ajouter chaque sous-domaine manuellement?


Non, vous ne pouvez pas ajouter de noms de domaine dynamiquement, vous devez ajouter chaque nom de domaine manuellement.