1
votes

Comment puis-je exporter la variable JS Angular 2 Frontend Express vers un composant Angular 2?

D'après mes recherches, je fais ce qui suit avec mon code. Actuellement, j'obtiens les erreurs suivantes dans ma console et je ne vois pas pourquoi. J'ai suivi un tutoriel ligne par ligne.

Toute aide serait grandement appréciée. J'essaie d'exporter la variable de nameid de mon fichier routes.js pour être utilisée dans un composant angulaire.

angular-master / express / config / routes.js p>

xmldoc.js:5 Uncaught ReferenceError: global is not defined
    at xmldoc.js:5
    at Object../node_modules/xmldoc/lib/xmldoc.js (xmldoc.js:339)
    at __webpack_require__ (bootstrap:76)
    at Object../node_modules/xmldoc/index.js (index.js:3)
    at __webpack_require__ (bootstrap:76)
    at Object../express/config/routes.js (routes.js:1)
    at __webpack_require__ (bootstrap:76)
    at Object../src/app/site/user-history/user-history.component.ts (user-history.component.ts:23)
    at __webpack_require__ (bootstrap:76)
    at Object../src/app/site/site.module.ts (main.js:8001)
(anonymous) @ xmldoc.js:5
./node_modules/xmldoc/lib/xmldoc.js @ xmldoc.js:339
__webpack_require__ @ bootstrap:76
./node_modules/xmldoc/index.js @ index.js:3
__webpack_require__ @ bootstrap:76
./express/config/routes.js @ routes.js:1
__webpack_require__ @ bootstrap:76
./src/app/site/user-history/user-history.component.ts @ user-history.component.ts:23
__webpack_require__ @ bootstrap:76
./src/app/site/site.module.ts @ main.js:8001
__webpack_require__ @ bootstrap:76
./src/app/app.module.ts @ app.component.ts:13
__webpack_require__ @ bootstrap:76
./src/main.ts @ environmentLoader.ts:21
__webpack_require__ @ bootstrap:76
0 @ main.ts:16
__webpack_require__ @ bootstrap:76
checkDeferredModules @ bootstrap:43
webpackJsonpCallback @ bootstrap:30
(anonymous) @ main.js:1

import { Component, OnInit } from '@angular/core';
import { RouterLink } from '@angular/router';
import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
import { Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { element } from 'protractor';
import { ActivatedRoute } from '@angular/router';
import { Router } from '@angular/router';

var routes = require('./../../../../express/config/routes.js');


@Component({
  selector: 'app-user-history',
  templateUrl: './user-history.component.html',
  styleUrls: ['../style.css']
})
export class UserHistoryComponent implements OnInit {


  constructor(
    private route: ActivatedRoute,
    private router: Router
  ) {}


  ngOnInit() {
	  console.log(routes.nameid); 


}

Ma console affiche les erreurs suivantes:

var xmldoc = require('xmldoc');
var DOMParser = require('dom-parser');
module.exports = function (app, config, passport) {

  app.get('/', function (req, res) {
      res.redirect('/home')
  });

  app.get('/login',
    passport.authenticate(config.passport.strategy,
      {
        successRedirect: '/',
        failureRedirect: '/login'
      })
  );

  app.post('/', function(req, res) {
    console.log('body saml:', req.body.SAMLResponse);
    const body = req.body.SAMLResponse;
    var b = new Buffer(body, 'base64');
	let text = b.toString('ascii');
    //var inflated = pako.inflateRaw(b, {to:'string'}); 
    console.log('formmatted saml',text);
     var document = new xmldoc.XmlDocument(text);
	 console.log('formmatted document',document);
     var status = document.descendantWithPath("samlp:Status").firstChild.attr;
    
   var attr = text.includes("AttributeStatement");
   var nameid = text.substring(text.lastIndexOf("<NameID>") + 8,text.lastIndexOf("</NameID>"));
   module.exports.nameid = nameid;
    console.log("status id:", status['Value']);
	console.log(attr);
	  console.log('LDAP DB username: ' + nameid);
  
  

};


3 commentaires

étiquette modifiée en angularjs -> la version angulaire est inférieure à 2


J'espère que vous comprenez qu'habituellement, Express vit sur le serveur et Angular dans le navigateur - et le fait que les deux soient JavaScript ne change rien ici.


Pour être honnête, je ne comprends pas. J'ai ce que je crois être deux exemples d'express. Un backend express que j'utilise pour passer des appels à ma base de données et un express qui vit dans un dossier de mon environnement Angular qui est utilisé pour la connexion SAML. Cela a-t-il un sens? J'essaie juste de transmettre une variable de mon fichier routes.js dans le dossier Express de mon env Angular à un composant Angular. Est-ce possible?


4 Réponses :


1
votes

Oups, vous devez utiliser l'importation au lieu de require.

import * as routes from './../../../../express/config/routes.js';
ngOnInit() {
  console.log(routes.nameid); 
}

Mais pourquoi invoquer une variable backend en front-end? ce sont des serveurs séparés


1 commentaires

Merci d'avoir contacté - Je reçois toujours la même erreur dans ma console. Mon jeu final est de capturer une partie des métadonnées SAML créées dans le processus de connexion à utiliser dans un appel de base de données par Angular. Y a-t-il une autre façon de faire cela?



0
votes

global est un objet global nodejs, comme window dans le navigateur. C'est nodejs uniquement, n'existe pas dans l'environnement du navigateur. Cela explique l'erreur.

Le fait est que le code express vit dans le runtime nodejs sur le serveur. Le code angulaire vit dans le navigateur. Ce sont deux environnements isolés qui ne peuvent pas accéder aux variables de l'autre comme vous essayez de le faire. C'est tout simplement impossible.


0 commentaires

1
votes

Vous devez comprendre que Node js est un framework côté serveur et Angular est un framework Frontend, les deux doivent être compilés.

Puisque les deux sont du javascript, vous pensiez que le code serveur pouvait être importé dans l'interface. Mais les fichiers package.json et angular.json d'Angular ne connaissent pas le fichier routes.js et il ne le compilera pas.

Angular sera chargé dans les navigateurs au format HTML et javascript.

Vous devez créer une API et essayer d'y parvenir.


0 commentaires

0
votes

Vous avez peut-être déjà essayé cette approche, mais essayez d'importer la variable spécifique que vous utilisez, au lieu de tout.

Par exemple: importer {nameid} depuis './../../../../express/config/routes.js'


0 commentaires