我有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 带到我的管理员服务,我将重定向到我的管理员登录页面。 感谢您的关注和帮助。
答案 0 :(得分: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');
}
});