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