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
Ma console affiche les erreurs suivantes: 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);
}
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);
};
4 Réponses :
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
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?
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.
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.
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'
é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?