Obtenir le domaine de Angular 5 Universal toujours retourner 127.0.0.1

J’ai un problème avec le rendu côté serveur des applications Angular 5. J’ai besoin de domaine pour créer un lien approprié (l’application est utilisée dans différents environnements et il est déconseillé de créer quelques packages pour chaque terminal).

J’essaie donc d’utiliser l’option de la stack, mais je reçois toujours 127.0.0.1:4000 en tant que domaine / hôte. Je pense que la meilleure option devrait être:

serveur.ts

app.engine('html', (_, options, callback) => { const engine = ngExpressEngine({ bootstrap: AppServerModuleNgFactory, providers: [ { provide: 'request', useFactory: () => options.req, deps: [] }, provideModuleMap(LAZY_MODULE_MAP) ] }); engine(_, options, callback); }); 

Et dans app.component.ts:

  constructor(@Inject(PLATFORM_ID) private platformId, private injector: Injector) { if (isPlatformServer(this.platformId)) { let req = this.injector.get('request'); console.log("host: " + req.get('host')); } else { console.log('we\'re rendering from the browser, there is no request object.'); } } 

Je vérifie également l’ option object de NodeJS -> elle ne contient aucune information sur un domaine. host est défini comme 127.0.0.1:4000 . Je n’ai aucune idée de comment puis-je l’obtenir de NodeJS. Pouvez-vous aider ou donner de petits conseils?

Peut-être que ma faute est que j’ai une mauvaise configuration Nginx?

 server { listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl; server_name mock.test.com; ssl_certificatee /home/xxx/Projects/xsw/cert/certificatee.chained.crt; ssl_certificatee_key /home/xxx/Projects/xsw/cert/key.prv; root /home/xxx/Projects/xsw/; index index.html; location / { proxy_pass http://127.0.0.1:4202; } } 

Je perds aujourd’hui environ 10 heures mais finalement j’ai trouvé une solution. Mon problème était lié à la configuration de nginx.

Quand j’utilise:

 location / { proxy_pass http://127.0.0.1:4000; } 

Nginx change d’hôte en demande dans 127.0.0.1:4000. Donc, une solution est d’éditer nginx proxy dans:

 location / { proxy_pass http://127.0.0.1:4000; proxy_set_header Host example.com; proxy_set_header HTTPS on; } 

Je ne change rien dans mon serveur express node.js:

serveur.ts

 app.engine('html', (_, options, callback) => { const engine = ngExpressEngine({ bootstrap: AppServerModuleNgFactory, providers: [ { provide: 'request', useFactory: () => options.req, deps: [] }, provideModuleMap(LAZY_MODULE_MAP) ] }); engine(_, options, callback); }); 

Et dans mon app.component.ts j’utilise cette config:

  private domain: ssortingng; constructor(@Optional() @Inject(REQUEST) private request: any, @Inject(PLATFORM_ID) private platformId, private injector: Injector) { if (isPlatformServer(this.platformId)) { if (this.request.get('https')) { this.domain = 'https://' + this.request.get('host'); } else { this.domain = 'http://' + this.request.get('host'); } } else { this.domain = document.location.protocol + '//' + document.location.hostname; } } 

Pour créer cette réponse, j’utilise une autre réponse de StackOverflow: https://stackoverflow.com/a/47434417/2972087 Et une partie de Nginx Docs: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header