Как я могу получить ответ от экспресс с Angular 6 - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть приложение MEAN Stack. Стандартное приложение, встроенное в общую папку, так что сервер может запускать оба приложения на одном и том же порту. Вот мои back-end маршруты

const express = require('express');
const router = express.Router();
const passport = require('passport');
const jwt = require('jsonwebtoken');
const config = require('../configs/config');
const Admin = require('../models/Admin');
const _ = require('lodash');



  router.get("/login",(req,res)=>{
        console.log("loginAccess");
        res.json({
            loginaccess:true,
        });

    });


router.post('/auth',(req,res,next)=>{
    const email = req.body.email;
    const password = req.body.password;
    Admin.getAdminByEmail(email, (err, admin) => {
        if (err) throw err;
        if (!admin) {
            return res.json({ success: false, msg: 'Admin not found' });
        }

        Admin.comparePassword(password, admin.password, (err, isMatch) => {
            if (err) throw err;
            if (isMatch) {
                let payload = {
                    id: admin._id,
                    email: admin.email,
                    role:config.ADMIN_HERO_STRING
                };
                const token = jwt.sign({ payload }, config.JWT_SECRET,{
                    expiresIn:3600
                });
                Admin.updateToken(email, token, (error, success) => {
                    if (error) return console.log("Error with updating token");
                    console.log(success);
                    res.json({
                        success: true,
                        token: "jwt " + token,
                        admin: {
                            id: admin._id,
                            email: admin.email
                        }
                    });
                    // res.redirect("/admins/home");
                });
            }
        });
    });
});

router.get('/manageApp',passport.authenticate('jwt', { session: false }),(req,res)=>{
    res.json({email:req.user});
});


module.exports = router; 

Я ищу способ, который может помочь мне взять этот ответ из маршрута входа в систему и использовать его в майском приложении. Для этого случая, когда я набираю localhost: 3000 / admin / login, он выводит ответ на страницу как json, так что моя проблема заключается в том, чтобы перенести этот jso на мой angular. А вот мой угловой сервис администратора

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AdminService {
  adminAccess:boolean=false;
  constructor(private http: HttpClient, private router:Router) {
      this.isRealAdmin();
   }

  isRealAdmin(){
    if(this.adminAccess){
      return this.router.navigate[('login')];
    }else{
      return false
    }
  }

}

Так что вы можете видеть, что он пуст, потому что я понятия не имею, как я могу взять JSON из Express. Я создал компонент для страницы входа администратора, и если я возьму loginaccess в службу администрирования, я перенаправлю на страницу входа администратора. Спасибо за внимание и за помощь.

1 Ответ

0 голосов
/ 01 ноября 2018

Это то, что вы хотите?

this.http.get('/login').subscribe(data => console.log(data.loginaccess));

Настройка экспресс-маршрутов:

// for web api
app.use('/api', routesApi);

// catch 404 and forward to Angular
app.use(function (req, res, next) {
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

// unauthorized error handler
app.use(function (err, req, res, next) {
  if (err.name === 'UnauthorizedError') {
    res.status(401);
    res.json({
      'message': err.name + ': ' + err.message
    });
  } else {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
    // render the error page
    res.status(err.status || 500);
    res.render('error');
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...