2022-09-02 nodejs——login api 业务逻辑

1.创建用户集合,初始化用户

1.1连接数据库

module文件夹是用来存储数据库操作的

首先在该文件夹中创建一个connect.js文件,用来连接数据库

// 引入mongoose第三方模块
const mongoose = require('mongoose')
// 连接数据库,参数:数据库的地址/数据库名字
mongoose.connect('mongodb://localhost/mydb')
  .then(() => {
  console.log('数据库连接成功')
}).catch(() => {
  console.log('数据库连接失败')
})

// 当前connect.js只是一个独立的模块,我们要想真正的连接数据库应该把这个模块引入到app.js中

// app.js
// 数据库连接
require('./model/connect')

1.2创建用户集合

然后再在module文件夹中新建一个文件叫user.js,用来创建用户集合

首先要知道存哪些字段,字段的类型是什么

具体转到mongodb数据库章节

// 创建用户集合
// 引入mongoose第三方模块
const mongoose = require('mongoose')

// 开头大写的方法是个构造函数,我们要创造这个构造函数的实例,所以要用一个变量去接收它;如何设定集合规则:我们在创建Schema构造函数实例的时候可以给他传递一个对象参数,这个对象参数里面设立的就是集合规则

// 创建用户集合规则
const userSchema new mongoose.Schema({
  username: {
  type: String,
//required: true 只能保证在注册的时候用户一定要提供username这个字段,但是这个字段的值是不能保证的,如果这个字段里面存了一个undefined或者null也是能通过的,所以还要指定用户名的最小长度
  required: true,
  minlength: 2,
  maxlength: 20},
  email: {
    type: String,
    unique: true, // 去重,如果有就不会插入,并且报错
    require: true
  },
  password: {
    type: String,
    require: true
  },
  role: {
    type: String,
    require: true
  },
  state: { // 0为启用,1为禁用
    type: Number,
    default: 0
  }
})

// 创建集合,使用model方法,参数:集合名,集合规则,返回一个这个集合的构造函数,用一个变量去接收它
const User = mongoose.model('User',userSchema)

// 在路由当中一定会对集合做增删改查的操作,所以在路由模块当中我们要引入这个用户集合,所以把用户集合的构造函数给开放出去,让别人能拿到。
// module.exports = User 但是以后可能还会开放其他的东西,所以直接写一个对象,代码如下
module.exports = {
  User // 当User: User的时候可以缩写,(在es6中键值相同就可以省略值)
}


1.3初始化用户

// 初始化一个用户,用来支撑登录功能,之后把创建这个用户的代码给注释掉

//在创建用户集合之后
//调用User实例对象的create方法,参数:一个对象;返回值是一个promise对象
User.create({
  username: 'lili',
  email: 'lili@qq.com',
  password: '123456',
  role: 'admin'
  state: 0
}).then(() => {
   console.log('用户创建成功')
}).catch(() => {
   console.log('用户创建失败')
})

// 写测试代码,把user.js文件在app.js中引用一下,为了创建这个初始化用户,然后把这个代码删掉
// app.js中
require('./model/user')

//require在导入的过程中会执行这个文件

1.4前端用Ajax技术发送请求

在app.js中引入body-parser模块(为post请求的req对象增加一个body)

npm i body-parser

// app.js
var bodyParser = require('body-parser')

/**
 *
 * 公共系统初始化
 *
 */
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))

密码加密 详情见bcrypt章节

使用nodejs第三方模块bcrypt

npm install bcryptjs
// 导入bcrypt模块 
const bcrypt = require('bcryptjs')
// 生成随机字符串 gen => generate 生成 salt 盐
let salt =  await bcrypt.genSalt(10) // await,使用返回值的方式式接收随机生成的字符串,不然也可以用then的匿名函数
// 使用随机字符串对密码进行加密
let pass = await bcrypt.hash('明文密码',salt)

设置cookie和session,详情见cookie与session章节

设置导航守卫(前端)详情见 vue/如何使用路由,token章节

posted @ 2024-02-16 21:05  lovevivi121  阅读(23)  评论(0)    收藏  举报  来源