以下函数UserService.signIn()调用服务器以登录用户:
UserService.signIn():
public signIn(credentials) {
let body = JSON.stringify(credentials);
return this.httpClient.post(this.userUrl, body, httpOptions)
.pipe(
map(token => {
this.cartService.getCart().subscribe();
}),
catchError(this.handleError.bind(this))
)
}
服务器的signIn函数将用户对象存储在req对象上,如下所示:req.user = user。 req.user登录到控制台并显示期望值。
user.server.controller#signIn()
exports.signin = function(req, res) {
const email = req.body.email;
const password = req.body.password;
User.findOne({
email:email
}).exec(function(err, user) {
if(err) {
} else if(user == null) {
}else {
if(bcrypt.compareSync(password, user.password)) {
console.log('user found', user)
var token = jwt.sign({name:user.name, email:user.email},
config.sessionSecret, {expiresIn:3600});
req.user = user;
console.log('\nuser.server.controller#req.user', req.user)
res.status(200).json(token);
return;
} else {
}
}
})
}
在返回上面显示的UserService.signIn()之后,在map方法中,它调用CartService.getCart()来检索用户的购物车,如下所示:
map(token => {
this.cartService.getCart().subscribe();
}),
CartService.getCart()然后调用服务器以检索用户的购物车,如下所示:
public getCart() {
return this.httpClient.get(this.cartUrl)
.pipe(
tap(cart => this.logger.log('cart', cart))
)
}
在cart.server.controller#getCart()中,我尝试使用在先前对user.server.controller#signIn()的调用期间先前保存到req对象的req.user电子邮件。错误的req.user未定义。
cart.server.controller#getCart()
exports.getCart = function (req, res) {
Cart.findOne({
email: req.user.email
}).exec(function (err, cart) {
})
}
答案 0 :(得分:0)
您已经定义了getCart
方法,该方法具有两个参数req和res,但是,无论何时调用它,都没有任何参数。这意味着您什么都没通过。
您必须将调用方法传递为-
this.cartService.getCart(req,res)
代替
this.cartService.getCart()