【问题标题】:How I can get response from express with Angular 6如何使用 Angular 6 从 express 获得响应
【发布时间】:2019-04-05 20:32:59
【问题描述】:

我在公共文件夹中内置了 MEAN Stack 应用程序。Angular 应用程序,因此服务器可以在同一端口上运行这两个应用程序。这是我的后端路线

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带到我的角度。这是我的角度管理服务

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
    }
  }

}

所以你可以看到它是空的,因为我不知道如何从 express 中获取 json。 我已经为管理员登录页面创建了组件,如果我将该 loginaccess 带到我的管理员服务中,我将重定向到我的管理员登录页面。 感谢您的关注和帮助。

【问题讨论】:

    标签: angular express mean


    【解决方案1】:

    这是你想要的吗?

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

    【讨论】:

    • 当 Angular 内置快速应用程序(在公共文件夹中)时,两个应用程序都在同一个端口上运行(在本例中为 3000),所以当我输入 localhost:3000/admin/login 时,它会向服务器发送请求,然后它从服务器带回那个 json,我只需要取那个值。
    • 我有点困惑。你能显示你的应用程序路线吗?我想看看您如何在 Angular 中配置路由?我猜 '/admin/login' 是一个 Angular 路由,对吧?因此,您需要在 express 中配置路由以将它们重定向到 Angular。我附上了我项目中以前的示例。
    • 你是对的,我的错误是在错误的提供商中设置了管理服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 2018-10-30
    • 2017-12-20
    相关资源
    最近更新 更多