admin管理员组文章数量:1569140
实现登录功能
- 创建用户集合,初始化用户
- 连接数据库
- 创建用户集合
- 初始化用户
- 为登录表单项设置请求地址,请求方式(GET方法会将参数放到地址栏中,不隐蔽,要用POST方法,它将参数放到消息体中,比较隐蔽)以及表单name属性
- 当用户点击登录按钮时,客户端验证用户是否填写了登录表单
- 如果其中一项没有输入,则阻止表单提交
- 服务器端请求接收参数,验证用户是否填写了登录表单(有时候客户端的js代码会被禁用,无法正确识别表单的准确性,故服务端的表单验证必不可少)
- 如果有一项没有输入,为客户端做出响应,阻止程序向下执行(例如,如果没有填写邮箱,则找不到该用户)(无论邮箱地址错误还是密码错误,一律提示两者都错,防止用户恶意猜出其他用户的账号密码)
- 根据邮箱地址查询用户信息
- 如果用户不存在,为客户端做出响应
- 如果用户存在,将用户名和密码进行比对
- 比对成功,则用户登录成功
- 比对失败,则则用户登录失败
数据库
数据库连接
在model中新建connect.js和user.js,分别用于数据库连接和创建用户集合。
connect.js
//连接数据库
//引入mongoose第三方模块,这个对象下面有个connect方法用户连接数据库
const mongoose = require('mongoose');
//连接数据库
mongoose.connect('mongodb://localhost/blog');
.then(() => console.log('数据库连接成功'))
.catch(() => console.log('数据库连接失败'))
在connect方法后,如果连接成功,会执行then中的函数;如果失败,会执行catch中的函数。
但是此时,connect.js只是一个独立的模块,要想真正连接数据库,要将这个模块引入到入口文件中去。
故在app.js文件中,使用require的方式,引入connect.js。require在引入文件时,同时会执行文件。
require('./model/connect');
由于它并不返回任何模块成员,故不需要使用变量去接受。
再使用mongodb --dbpath E:\mongodb\data
,启动数据库
保存修改的代码,再命令行可以看到数据库连接成功。
设定用户集合
用户集合中要存的字段:
用户名
邮箱(登录)
密码
角色(普通用户,管理员)
状态(启用,禁用)
再user.js中要使用到mongoose的Schema,故也要引入mongoose模块。
Schema是一个构造函数,由于要创建一个实例,故要使用new,并且用一个常量去接受这个实例。
而创建这个实例的时候,可以把集合规则当作参数传入。
//创建用户集合规则
const userSchema = new mongoose.Schema({
username:{
type: String,
//只能保证注册的时候用户一定要提供username的字段,如果字段中存了undefined 或 none 则也能够通过验证
require: true,
minlength: 2,
maxlength: 20
},
email: {
type: String,
//保证邮箱地址在插入数据库时不重复
unique: true,
require:true
},
password: {
type: String,
require:true
},
role: {
type: String,
require: true
},
// 0 启用状态
// 1 禁用状态
state: {
type: Number,
default: 0
}
});
使用mongoose的model方法,创建一个User集合,使用上方变量中的规则。model方法会返回集合的构造函数,可以用集合的构造函数对集合进行各种各样的操作。故使用一个常量接受这个构造函数
const User = mongoose.model('User', userSchema);
最后,将用户集合作为模块成员进行导出。
module.exports = {
Users : User
}
由于在es6中,如果对象的键和值名称一样,可以省略掉值。即仅仅写成User也可以。
module.exports = {
Users
}
此时,用户集合创建完成。
初始化用户
在user.js中调用User的create方法,在参数中传入信息。
User.create({
username: 'username1',
email: 'username1@qq',
password: '1',
role: 'admin',
state: 0
}).then(() => {
console.log('用户创建成功')
})
.catch(() => {
console.log('用户创建失败')
})
在app.js中引入,进行测试
require('./model/user');
提示成功。
在compass中输入mongodb://localhost/blog
连接数据库成功,查看User集合,插入数据成功
此时可以把app.js中的require('./model/user');
去掉了,因为其实并不能在app.js中引用,而应该在路由文件中引入User,因为我们在路由文件中对数据库进行操作,而不是在app.js中对路由进行操作,并且要把创建用户的测试代码注释掉,否则多次引入时会出现错误。(快捷键ctrl+/)
版权声明:本文标题:web前端 | 博客(二)登录功能 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1726722024a1081901.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论