nodejs实现登录注册的思路

案例

  1. 登录功能
- 用户名和密码的验证
- 验证码发送到邮箱(为了方便, 开发完毕最后实现)
  1. 首页
- 渲染一下昵称
  1. 个人中心页面
- 登录验证, 不登陆状态下直接跳转回登陆页面
- 用户信息的渲染
- 用户信息修改
  1. 修改密码页面
- 根据原始密码修改新密码

实现页面

  • express 实现服务
  • express-art-template 实现 res.render()
    • 为了渲染页面, 自动读取, 自动组装, 自动返回
    • 依赖一个 art-template
  // app.js
  const express = require('express')
  const app = express()

  // 1. 引擎注册 express-art-template
  app.engine('html', require('express-art-template'))
  // 如果你需要修改文件夹
  app.set('views', __dirname + '/pages')

  app.listen()
  // viewRouter.js
  router.get('页面', (req, res) => {})
  router.get('页面', (req, res) => {})
  router.get('页面', (req, res) => {})
  router.get('页面', (req, res) => {})
  // userRouter.js
  router.get('/getInfo', (req, res) => {})
  router.post('/update', (req, res) => {})
  router.post('/updatePwd', (req, res) => {})
  router.post('/login', (req, res) => {})

处理静态资源

  • 使用 express.static()
  app.use('/public', express.static('路径'))
  app.use('/node_modules', express.static('路径'))

实现登录

  1. 接收前端发来的用户名和密码
+ 进行数据库比对的验证
+ 需要用到 mongoose 数据库
+ 数据库操作单独封装
  const mongoose = express('mongoose')
  // 连接数据库
  mongoose.connect('路径')

  // 创建结构
  const user = new mongoose.Schema({
    email: 字符串类型, 必填
    password: 字符串类型, 必填, 6 ~ 12 位
    age: 数值类型, 默认值, 0
    gender: 字符串类型, 枚举类型, 默认值, 保密
    phone: 字符串类型, 限定长度, 11
    desc: 字符串类型, 限定长度, 200
    avatar: 字符串类型, 默认值, 没有图片的时候使用默认路径
    hobby: 数组类型
  })

  // 创建模型
  mongoose.model('users', user)

  // 数据库操作

  1. 配置路由
+ 添加一个接收 login 请求的路由
+ 因为 login 需要 post 请求
+ 接收请求体
+ 配置接收
```javascript
// body-parser
// express 自己带的
app.use(express.urlencoded())
```
  1. 验证登录
- 一定要自己验证一遍数据
  + 保证有
  + 保证格式是对的
- 再去数据库查询
- 为了保持登录状态, 需要使用到 cookie + session 来保持登录状态
- 需要 express-session, connect-mongo
```javascript
  const session = require('session')
  const MongoStore = require('connect-mongo')(session)

  // 挂载到 app 商
  app.use(session({
    screct: 'guoxiang',
    name: 'sessid',
    resave: true,
    saveUnxxxx: true,
    cookie: { maxAge: 1000 * 60 },
    store: new MongoStore({
      url: '地址'
    })
  }))
```

首页的业务逻辑

  • 在页面的路由中进行判断
    • 如果登录了, 需要渲染一种结果
    • 如果没有登录, 需要渲染一种结果
if (req.session.userInfo) {}

个人中心的业务逻辑

  • 登录验证
    • 如果没有登录, 直接回到登陆页面
    • 直接在路由里面就可以验证
  if (!req.session.userInfo) return res.redirect('登录页面')

  // 展示个人中心页面, 数据要渲染号
  • 根据当前用户的信息把表单渲染好
  • 接收前端传递来的数据
  • 因为有文件, 需要 multer
const multer = require('multer')

// 准备一个仓库信息
const storage = multer.diskStorage({
  destination () {},
  filename () {}
})

const avatar = multer({ storage: storage })

// 路由中使用
  • 进行数据验证
  • 存储到数据库里面
// session 里面有用户 id
findByIdAndUpdate()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值