web前端 | 博客(二)登录功能

实现登录功能

  1. 创建用户集合,初始化用户
    1. 连接数据库
    2. 创建用户集合
    3. 初始化用户
  2. 为登录表单项设置请求地址,请求方式(GET方法会将参数放到地址栏中,不隐蔽,要用POST方法,它将参数放到消息体中,比较隐蔽)以及表单name属性
  3. 当用户点击登录按钮时,客户端验证用户是否填写了登录表单
  4. 如果其中一项没有输入,则阻止表单提交
  5. 服务器端请求接收参数,验证用户是否填写了登录表单(有时候客户端的js代码会被禁用,无法正确识别表单的准确性,故服务端的表单验证必不可少)
  6. 如果有一项没有输入,为客户端做出响应,阻止程序向下执行(例如,如果没有填写邮箱,则找不到该用户)(无论邮箱地址错误还是密码错误,一律提示两者都错,防止用户恶意猜出其他用户的账号密码)
  7. 根据邮箱地址查询用户信息
  8. 如果用户不存在,为客户端做出响应
  9. 如果用户存在,将用户名和密码进行比对
  10. 比对成功,则用户登录成功
  11. 比对失败,则则用户登录失败

数据库

数据库连接

在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.com',
  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+/)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值