我正尝试为Angular / NodeJS应用程序编写一个sigup方法,如下所示,但是当我尝试检查要注册的用户是否存在时,我的相关方法不起作用。
users.js:
router.get('/findUser', cors.corsWithOptions, (req,res,next) => {
User.find(req.body.user)
.then((user) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
return res.json({status: 'User founded...', success: true});
}, (err) => next(err))
.catch((err) => next(err));
});
router.post('/signup', cors.corsWithOptions, (req, res, next) => {
User.register(new User({username: req.body.username}),
req.body.password, req.body.admin, (err, user) => {
if(err) {
res.statusCode = 500;
res.setHeader('Content-Type', 'application/json');
res.json({err: err});
}
else {
user.password = req.body.password;
if (req.body.firstname)
user.firstname = req.body.firstname;
if (req.body.lastname)
user.lastname = req.body.lastname;
if (req.body.admin)
user.admin = req.body.admin;
user.save((err, user) => {
if (err) {
res.statusCode = 500;
res.setHeader('Content-Type', 'application/json');
res.json({err: err});
return next(err);
}
passport.authenticate('local')(req, res, () => {
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json({success: true, status: 'Registration Successful!'});
});
});
}
});
});
auth.service.ts:
checkUserExistence(user : any) : any {
this.http.get<UserResponse>(baseURL + 'users/findUser')
.subscribe(res => {
if(res.success){
console.log('user founded!');
return true;
}
},
err => {
console.log('A problem happened: ', err);
this.destroyUserCredentials();
return false;
});
}
signUp(user: any): Observable<any> {
if (this.checkUserExistence(user) === false) {
return this.http.post<RegResponse>(baseURL + 'users/signup',
{'username': user.username, 'password': user.password})
.pipe( map(res => {
this.storeUserCredentials({username: user.username});
return {'success': true, 'username': user.username };
}),
catchError(error => this.processHTTPMsgService.handleError(error)));
}
else{
console.log('This user already exists!')
}
}
在chrome控制台中,我看到它将用户保存在db上,并且还出现以下错误:
User: {username: "testuser", password: "123", remember: false}
auth.service.ts:124 This user already exists!
core.js:5873 ERROR TypeError: Cannot read property 'subscribe' of undefined
at SignupComponent.onSubmit (signup.component.ts:23)
at SignupComponent_Template_form_ngSubmit_7_listener (signup.component.html:13)
at executeListenerWithErrorHandling (core.js:21685)
at wrapListenerIn_markDirtyAndPreventDefault (core.js:21727)
at SafeSubscriber.schedulerFn [as _next] (core.js:36900)
at SafeSubscriber.__tryOrUnsub (Subscriber.js:183)
at SafeSubscriber.next (Subscriber.js:122)
at Subscriber._next (Subscriber.js:72)
at Subscriber.next (Subscriber.js:49)
at EventEmitter.next (Subject.js:39)
defaultErrorLogger @ core.js:5873
handleError @ core.js:5926
handleError @ core.js:13548
executeListenerWithErrorHandling @ core.js:21688
wrapListenerIn_markDirtyAndPreventDefault @ core.js:21727
schedulerFn @ core.js:36900
__tryOrUnsub @ Subscriber.js:183
next @ Subscriber.js:122
_next @ Subscriber.js:72
next @ Subscriber.js:49
next @ Subject.js:39
emit @ core.js:36819
onSubmit @ forms.js:6253
NgForm_submit_HostBindingHandler @ forms.js:6294
executeListenerWithErrorHandling @ core.js:21685
wrapListenerIn_markDirtyAndPreventDefault @ core.js:21727
(anonymous) @ platform-browser.js:934
invokeTask @ zone-evergreen.js:400
onInvokeTask @ core.js:41235
invokeTask @ zone-evergreen.js:399
runTask @ zone-evergreen.js:168
invokeTask @ zone-evergreen.js:481
invokeTask @ zone-evergreen.js:1596
globalZoneAwareCallback @ zone-evergreen.js:1622
auth.service.ts:50 user founded!
我尝试多次修改此代码,但无法解决问题!由于我是一名新学习者,请帮助我知道为什么会发生这种情况以及如何解决?