angular - Angular 6 - 登录注册用户时返回错误 - 我该如何解决?
问题描述
我对 Angular 比较陌生,我已经开始学习身份验证,所以我一直在尝试为我自己的 Angular 应用程序设置身份验证。
注册工作并成功导航到我提供的成功路线。但是,使用正确的凭据登录会产生一个我使用控制台日志定义的错误。
我到底错过了什么?
-
控制台错误
用户登录时出错:[object Object]
-
服务器.js
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const User = require('./models/User')
const Idea = require('./models/Idea');
const app = express();
const router = express.Router();
app.use(cors());
app.use(bodyParser.json());
mongoose.connect('mongodb://localhost:27017/example-app', { useNewUrlParser: true });
const connection = mongoose.connection;
connection.once('open', () =>
{
console.log('Connected to MongoDB')
});
// ***************************** \\
// USER REQUESTS
// ***************************** \\
// Post (create) new user
router.route('/register').post((req,res) =>
{
let userData = new User(req.body);
userData.save()
.then(createdUser =>
{
res.status(200).json({'User': 'New user was added successfully'});
})
.catch(err =>
{
res.status(400).send('Failed to create new user');
});
});
// Post (login) existing user
router.route('/login').post((req,res) =>
{
let userData = req.body;
User.findOne({email: userData.email}, (err, foundUser) =>
{
if(err)
{
console.log("Error attempting to login: " + err);
}
else
{
if(!foundUser)
{
res.status(401).send("Email is not registered with us.");
}
else if(foundUser.password !== userData.password)
{
res.status(401).send("Invalid Password");
}
else
{
res.status(200).send('Login Successful');
}
}
});
});
// ***************************** \\
// IDEA REQUESTS
// ***************************** \\
// Get all existing ideas
router.route('/ideas').get((req,res) =>
{
Idea.find((err,foundIdeas) =>
{
if(err)
{
console.log(err);
}
else
{
res.json(foundIdeas);
}
})
});
// Get specific existing idea
router.route('/ideas/:id').get((req,res) =>
{
Idea.findById(req.params.id, (err,foundIdea) =>
{
if(err)
{
console.log(err);
}
else
{
res.json(foundIdea);
}
});
});
// Post (create) new idea
router.route('/ideas/add').post((req,res) =>
{
let ideaData = new Idea(req.body);
ideaData.save()
.then(createdIdea =>
{
res.status(200).json({'idea': 'New idea was added successfully'});
})
.catch(err =>
{
res.status(400).send('Failed to create new record');
});
});
// Post (edit) specific existing idea
router.route('/ideas/update/:id').post((req,res) =>
{
Idea.findById(req.params.id, (err,foundIdea) =>
{
if(!foundIdea)
{
return next(new Error('Could not find or load document'));
}
else
{
foundIdea.title = req.body.title;
foundIdea.textBox1 = req.body.textBox1;
foundIdea.textBox2 = req.body.textBox2;
foundIdea.textBox3 = req.body.textBox3;
foundIdea.textBox4 = req.body.textBox4;
foundIdea.textBox5 = req.body.textBox5;
foundIdea.textBox6 = req.body.textBox6;
foundIdea.save()
.then(foundIdea =>
{
res.json('Idea updated successfully')
})
.catch(err =>
{
res.status(400).send('Failed to update existing record');
});
}
});
});
// Get (delete) specific existing idea
router.route('/ideas/delete/:id').get((req,res) =>
{
Idea.findByIdAndRemove({_id: req.params.id}, (err,foundIdea) =>
{
if(err)
{
res.json(err);
}
else
{
res.json('Delete idea successfully');
}
});
});
app.use('/', router);
app.get('/', (req,res) => res.send('Connected to Server!'));
app.listen(4000, () => console.log("Connected to Express (Port: 4000)"));
-
auth.service.ts [片段]
export class AuthService {
private _uri = 'http://localhost:4000';
private _registerUri = `${this._uri}/register`;
private _loginUri = `${this._uri}/login`;
constructor(private http: HttpClient) { }
// Register new user to database
registerUser(user)
{
return this.http.post<any>(`${this._registerUri}`, user);
}
// Login new user to database
loginUser(email: String, password: String)
{
return this.http.post<any>(`${this._loginUri}`, {email: email, password: password});
}
-
login.component.html
div class="container">
<h1 id="h_Login">Sign Into Your Account</h1>
<div class="row" id="main-content">
<form class="col-8 mx-auto" id="col_FormContent">
<div class="form-group section">
<label for="email">Email</label>
<input type="text" class="form-control" id="email" [(ngModel)]="loginUserData.email" name="email" #email="ngModel">
</div>
<div class="form-group section">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" [(ngModel)]="loginUserData.password" name="password" #password="ngModel">
</div>
<div class="section_Buttons">
<button class="btn btn-m btn-block" type="submit" (click)="loginUser()">Sign In</button>
</div>
</form>
</div>
</div>
-
login.component.ts [片段]
export class LoginComponent implements OnInit {
loginUserData: any = {};
loginForm: FormGroup;
constructor(private authService: AuthService, private router: Router) { }
ngOnInit() {}
// EVENT HANDLER - (Login Button) Verify and Login user from database
loginUser()
{
this.authService.loginUser(this.loginUserData.email, this.loginUserData.password)
.subscribe(
res =>
{
console.log("Login was successful");
this.router.navigate(['/dashboard']);
},
err =>
{
// **** THE ERROR THAT IS RETURNED **** \\
console.log("Error on user login: " + err);
}
);
}
}
-
User.js(服务器端用户模型架构)
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
let User = new Schema({
email: { type: String },
password: { type: String }
});
module.exports = mongoose.model('User', User);
解决方案
尝试在响应中返回 json:
router.route('/login').post((req,res) =>
{
let userData = req.body;
User.findOne({email: userData.email}, (err, foundUser) =>
{
if(err)
{
console.log("Error attempting to login: " + err);
}
else
{
if(!foundUser)
{
res.status(401).send("Email is not registered with us.");
}
else if(foundUser.password !== userData.password)
{
res.status(401).send("Invalid Password");
}
else
{
res.status(200).json({'result':'Login Successful'});
}
}
});
});
推荐阅读
- go - 在 Golang 中发送接收 http 标头
- flutter - 如何在颤动中覆盖pdf文件?
- ansible - Ansible set_fact 值 No 转换为 False
- php - HTML 和 PHP 表单 - 在多个图像上运行 imagemagick 命令
- json - 错误:输入'_InternalLinkedHashMap
' 不是类型 'List 的子类型 ' - ios - For-in 循环需要“JSON?” 符合“顺序”;你的意思是解开可选的吗?
- ios - LazyVGrid 项目重叠
- python - python:使用 df.replace 处理区分大小写的更好方法
- node.js - 如何在 mongodb 中使用正则表达式填充值
- firebase-analytics - 如何在 Firebase 控制台上显示超过 30 分钟的数据?