Node.js 如何在平均堆栈应用程序中从后端到前端进行通信?

Node.js 如何在平均堆栈应用程序中从后端到前端进行通信?,node.js,angular,express,mongoose,mean-stack,Node.js,Angular,Express,Mongoose,Mean Stack,我是MEAN stack应用程序的新手,在尝试将数据从服务器发送到前端时遇到了一些问题。然而,我确实有一些沟通,但这似乎是我所能做的。在服务器中,我发送了json消息 服务器 前端 这很好,但除了使用flash消息,我似乎无法执行req/res。我的问题是想把它用在其他方面,而不仅仅是flash消息。例如,如果用户没有会话,那么我希望他们导航回登录页面。以下是我尝试过但失败的东西 服务器 前端 我发现通信的唯一方式是发送错误闪存消息,而不是其他任何方式。您可以调用api来检查用户是否登录到ngO

我是MEAN stack应用程序的新手,在尝试将数据从服务器发送到前端时遇到了一些问题。然而,我确实有一些沟通,但这似乎是我所能做的。在服务器中,我发送了json消息

服务器 前端 这很好,但除了使用flash消息,我似乎无法执行req/res。我的问题是想把它用在其他方面,而不仅仅是flash消息。例如,如果用户没有会话,那么我希望他们导航回登录页面。以下是我尝试过但失败的东西

服务器 前端
我发现通信的唯一方式是发送错误闪存消息,而不是其他任何方式。

您可以调用api来检查用户是否登录到
ngOnInit
lifecycle hook,因此每次加载组件时,您都可以检查会话是否存在于后端并相应地路由

 export class App implements OnInit{
          constructor(){
             //called first time before the ngOnInit()
          }

          ngOnInit(){
           //CheckLogin() is a method in your service which calls your backend api
             this.http.post("your authentication url to check if session exits ",{username:username}).subscribe(data=>{
            if (data["loggedIn"] === false)

               this.router.navigate(["/users/login"])


        }) 
          }

}

Angular还具有
HTTP拦截器
,您可以使用jwt解决此问题,

只要确保我正确回答了您的问题:您想向“/home”发送get请求,并且如果用户未登录(会话已过期)您想导航到登录页面,对吗?@Serg如果您不想调用API错误消息,可以使用
socket
。您也可以使用JWT,在登录或任何路由更改期间,验证JWT令牌到期时间。如果令牌到期,则您可以将用户重定向到登录页面。@pavan skipo这就是我试图做的,是的,但主要问题只是使用angular与服务器通信。@Yash Rami,我必须查看套接字,但我也不想使用jwt,这就是为什么我选择sessions而不是jwt的原因。这是说类型服务上不存在CheckLogin,我也不使用jwt。我正在使用会话。是的,因为您的服务中不存在这种方法。我认为您可以即兴创作。更新了我的答案。请检查@Serg
 registerUser(username, email, password)  {
    const user =  {
      username: username,
      email: email,
      password: password
    };
    return this.http.post(`${this.uri}/users/register`, user)
    .pipe(map(response => console.log(response)))

    .subscribe(() => { this.router.navigate(["/users/login"]) }, (errResp) => {

      errResp.error ? this.ngFlashMessageService.showFlashMessage({

        messages: [errResp.error.registerErrRequired], // Where json message gets caught and shown to the browser
      dismissible: true,
      timeout: false,
      type: 'danger'
      }) : console.log("An unkown error occured.");
    });
  }
// Middleware
const redirectLogin = ((req, res, next) => {
    if (!req.session.user) 
        res.status(401).json({ loggedIn: false });
    else
        next();
}); 
// Route
router.route("/home").get(redirectLogin, (req, res) => {
    Blog.find((err, docs) => {
        if (err)
        console.log(err);
    else
        res.json(docs);
    }); 
});
homePage() {
  // Here is where I would like to say, If session, then true, else navigate(["/users/login"])
   if (loggedIn === false)
       this.router.navigate(["/users/login"])
   else
       // Success
  return this.http.get(`${this.uri}/home`);
}
 export class App implements OnInit{
          constructor(){
             //called first time before the ngOnInit()
          }

          ngOnInit(){
           //CheckLogin() is a method in your service which calls your backend api
             this.http.post("your authentication url to check if session exits ",{username:username}).subscribe(data=>{
            if (data["loggedIn"] === false)

               this.router.navigate(["/users/login"])


        }) 
          }

}