gpt4 book ai didi

node.js - 如何在 MEAN 堆栈应用程序中从后端到前端进行通信?

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:29 25 4
gpt4 key购买 nike

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

服务器

router.route("/users/register").post((req, res) => { 

registerLogin.findOne({ $or: [{ username }, { email }]}, (err, user) => {
if (err)
res.send(err);

else if (!username || !email || !password)
res.status(403).json({ registerErrRequired: "Fill out whole form." });

前端

 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.");
});
}

这很有效,但除了使用闪现消息之外,我似乎无法执行请求/解析。我的问题是想以其他方式使用它,而不仅仅是闪现消息。例如,如果用户没有 session ,那么我希望他们导航回登录页面。这是我尝试过但失败的。

服务器

// 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`);
}

我发现沟通的唯一方法是通过发送错误提示消息,除此之外别无其他。

最佳答案

你可以做的是在ngOnInit生命周期钩子(Hook)中调用api来检查用户是否登录,这样每次组件加载时你都可以检查后端和路由上是否存在 session 相应地。

 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和http interceptors解决这个问题

关于node.js - 如何在 MEAN 堆栈应用程序中从后端到前端进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58128931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com