【发布时间】:2017-12-29 11:53:00
【问题描述】:
我是全栈 Web 开发的新手。现在我遇到了一个问题。我正在使用 mongodb、mongoose、node 和 express。
我有两个控制器,一个是注册,另一个是配置文件。
注册码是这样的
router.post('/',(req,res,next)=>{
let user = new userProfile();
user.email = req.body.email;
user.name = req.body.firstName;
user.save((err)=>{
if(err){
return err;
}
})
res.redirect('/profile');
});
点击提交后,我可以在集合中找到用户条目。现在我在配置文件控制器。
个人资料代码:
router.get('/',(req,res)=>{
console.log(req.body.email);
userProfile.find({email: 'yyyy'},(err,user)=>{
if(err) return err;
})
res.render('profile/profile');
})
当我执行 console.log 时,它输出未定义。预期的输出应该是注册页面的电子邮件地址,这样当我找到功能时,我会得到具有相同电子邮件地址的正确条目并在网页上显示相应的用户名。
我的问题是配置文件控制器如何从注册控制器访问相同的帖子信息。
【问题讨论】:
-
req对象仅限于“当前请求”,这意味着如果您实际上没有在该请求的“正文”中发送任何内容,那么那里什么都没有。无论如何,您实际上并不使用 GET 请求中的“正文”。相反,您可以在 url 中发送数据并在请求中匹配为router.get('/:email',(req,res) => { userProfile.findOne({ "email": req.params.email },...,或者实际上您宁愿使用“会话”并通过它检索当前经过身份验证的用户。或许将passport 视为集成身份验证的一种方式。 -
听起来你需要在服务器上建立一个用户会话,所以一旦用户在第一个请求上登录,当第二个请求进来时,你就可以知道它是哪个用户。 http 服务器基本上是无状态的,因此您不会直接从另一个请求中的一个请求访问数据,因为当第二个请求到达时,第一个请求早已消失。相反,您可以对用户进行 cookie,然后可以使用实现会话对象的代码来存储该特定用户的半永久性数据,这些数据可以在未来的请求中访问。见express-session。
标签: javascript node.js mongodb express mongoose