Как экспортировать переменную JS Angular 2 Frontend Express в компонент Angular 2? - PullRequest
1 голос
/ 29 марта 2019

Основываясь на своих исследованиях, я делаю следующее с моим кодом.В настоящее время я получаю следующие ошибки в моей консоли, и я не понимаю, почему.Я следовал за учебником построчно.

Любая помощь будет принята с благодарностью.Я пытаюсь экспортировать переменную nameid из моего файла rout.js, который будет использоваться в компоненте Angular.

angular-master / express / config / rout.js

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);
  
  

};

angular-master / src / app / site / user-history / user-history.component.ts

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); 


}

Моя консоль показывает следующие ошибки:

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

Ответы [ 4 ]

1 голос
/ 08 апреля 2019

Вы должны понимать, что Node js - это инфраструктура на стороне сервера, а Angular - это среда Frontend, обе должны быть скомпилированы.

Поскольку оба являются javascript, вы думали, что серверный код может быть импортирован в веб-интерфейс. Но файл package.json и angular.json в Angular не знают маршруты и не будут компилироваться.

Angular будет загружен в браузеры в виде обычного HTML и JavaScript.

Вам нужно создать API и попытаться достичь этого.

1 голос
/ 29 марта 2019

Упс, вы должны использовать import вместо require.

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

Но зачем вызывать внутреннюю переменную в front end?это отдельные серверы

0 голосов
/ 09 апреля 2019

Возможно, вы уже пробовали этот подход, но попробуйте импортировать конкретную переменную, которую вы используете, вместо всего.

Например: import { nameid } from './../../../../express/config/routes.js'

0 голосов
/ 06 апреля 2019

global - это глобальный объект nodejs, например window в браузере. Это только для nodejs, не существует в среде браузера. Это объясняет ошибку.

Дело в том, что экспресс-код живет во время выполнения nodejs на сервере. Угловой код живет в браузере. Это две изолированные среды, которые не могут получить доступ к переменной друг друга, как вы пытаетесь сделать. Это просто невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...