Vue+Express实现登录注销功能的实例代码

下面我将详细讲解 “Vue+Express实现登录注销功能的实例代码” 的完整攻略。

1. 环境准备

首先,我们需要在本地安装好以下环境:

  1. Node.js
  2. Vue.js
  3. Express
  4. MongoDB

如果你没有安装,可以先按照官方教程安装好,才能继续进行下一步。

2. 创建项目

接着,我们需要创建两个项目,一个前端项目,使用Vue.js来实现登录页面的渲染和交互,另一个是后端项目,使用Express来实现后端接口的编写和对MongoDB的增删改查操作。

2.1 创建前端项目

  1. 使用Vue-cli来创建项目
npm install -g @vue/cli

vue create frontend

cd frontend

npm run serve
  1. 安装Vue-router和Axios
npm install vue-router --save

npm install axios --save

2.2 创建后端项目

  1. 使用express-generator来创建项目
npm install -g express-generator

express backend

cd backend

npm install

npm start
  1. 安装依赖
npm install cors mongoose --save

3. 编写代码

3.1 前端实现

  1. 编写登录页面Login.vue

在前端项目/src/views目录下,创建一个名为Login.vue的文件,代码如下:

<template>
  <div class="login-container">
    <h1>登录</h1>
    <form>
      <div class="form-item">
        <label>用户名:</label>
        <input type="text" v-model="username" placeholder="请输入用户名"/>
      </div>
      <div class="form-item">
        <label>密码:</label>
        <input type="password" v-model="password" placeholder="请输入密码"/>
      </div>
      <button type="submit" class="login-btn" @click="handleSubmit">登录</button>
    </form>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    async handleSubmit() {
      const { username, password } = this
      try {
        const res = await axios.post('/api/login', {
          username,
          password
        })
        if (res.data.success) {
          localStorage.setItem('token', res.data.token)
          this.$router.push('/')
        } else {
          alert('用户名或密码错误')
        }
      } catch (err) {
        console.log(err)
      }
    }
  }
}
</script>

<style scoped>
.login-container {
  margin: 0 auto;
  width: 300px;
  padding-top: 120px;
}

.form-item {
  display: flex;
  margin-bottom: 20px;
}

form input {
  flex: 1;
}

form label {
  width: 60px;
  line-height: 32px;
}

.login-btn {
  display: block;
  width: 100%;
  line-height: 36px;
  background-color: #42b983;
  border: none;
  color: #fff;
  border-radius: 3px;
  cursor: pointer;
}
</style>
  1. 修改路由配置

找到main.js文件,在其中添加以下代码来定义路由:

import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

在src目录下新建router目录,并在其中创建index.js文件,代码如下:

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/views/Login.vue'
import Home from '@/views/Home.vue'

Vue.use(Router)

const router = new Router({
  routes: [
    {
      path: '/login',
      name: 'Login',
      component: Login
    },
    {
      path: '/',
      name: 'Home',
      component: Home
    }
  ]
})

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token')
  if (to.path === '/login' || token) {
    next()
  } else {
    next('/login')
  }
})

export default router

3.2 后端实现

  1. 创建数据库集合

打开命令行,连接MongoDB,创建一个名为users的集合,用来存储用户信息。

use test

db.users.createIndex({username:1},{unique:true})
  1. 编写接口代码

在后端项目/routes目录下,创建一个名为api.js的文件,代码如下:

const express = require('express')
const router = express.Router()
const User = require('../models/user')
const jwt = require('jsonwebtoken')
const secretKey = 'vue-express-secret'

router.post('/login', async (req, res) => {
  const { username, password } = req.body
  const user = await User.findOne({
    username,
    password
  })
  if (user) {
    const token = jwt.sign(
      {
        id: user._id
      },
      secretKey,
      { expiresIn: '1h' }
    )
    res.json({
      success: true,
      message: '登录成功',
      token
    })
  } else {
    res.status(401).json({
      message: '用户名或密码错误'
    })
  }
})

router.post('/logout', (req, res) => {
  res.json({
    success: true
  })
})

module.exports = router

在后端项目/models目录下,创建一个名为user.js的文件,代码如下:

const mongoose = require('mongoose')
const { Schema } = mongoose

const userSchema = new Schema({
  username: String,
  password: String
})

module.exports = mongoose.model('User', userSchema)

在后端项目/app.js中添加以下代码,用于启用接口。

const express = require('express')
const cors = require('cors')
const mongoose = require('mongoose')
const api = require('./routes/api')

const app = express()

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true })

app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.use(cors())

app.use('/api', api)

const port = process.env.PORT || 3000
app.listen(port, () => {
  console.log(`Listening on port ${port}`)
})

至此,我们已经完成了前后端代码的编写,接下来就是测试。

4. 测试

  1. 启动前端项目

在前端项目根目录下执行以下命令:

npm run serve
  1. 启动后端项目

在后端项目根目录下执行以下命令:

npm start
  1. 浏览器访问

在浏览器中输入 http://localhost:8080/login,就可以看到登录页面了。输入正确的用户名和密码,点击登录按钮,会自动跳转到主页。

  1. 测试注销功能

在浏览器控制台中输入以下命令,就可以清除登录信息了。

localStorage.removeItem('token')

以上就是Vue+Express实现登录注销功能的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue+Express实现登录注销功能的实例代码 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • python实现ftp文件传输系统(案例分析)

    下面是对”python实现ftp文件传输系统(案例分析)”的详细讲解: 1. 简介 FTP(File Transfer Protocol)文件传输协议是一种用于文件的传输,支持文件上传、下载、创建、删除等操作。使用Python编写FTP服务,可以实现文件传输的功能。 2. 实现步骤 下面是实现FTP文件传输系统的步骤: 建立socket连接; 配置socke…

    人工智能概论 2023年5月25日
    00
  • Nginx配置https的实现

    Nginx配置https的实现需要进行以下几个步骤: 1. 申请SSL证书 首先需要申请可信的SSL证书,可以选择一些常见的证书颁发机构(CA)如LetsEncrypt等,也可以自己生成证书。如果是自己生成,则需要使用openssl命令生成证书: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out …

    人工智能概览 2023年5月25日
    00
  • Ubuntu 搭建LNMP环境图文教程 安装Nginx服务器

    Ubuntu 搭建 LNMP 环境图文教程 前言 LNMP是使用Linux+Nginx+MySQL+PHP构建的Web开发环境。Ubuntu是一个广泛使用的Linux操作系统。搭建LNMP环境在开发Web应用中非常常见。本文将介绍如何在Ubuntu中搭建LNMP环境,并安装Nginx服务器。 准备工作 在开始搭建环境之前,需要确保系统需要更新到最新的软件版本…

    人工智能概览 2023年5月25日
    00
  • Perl5 OOP学习笔记第1/2页

    如果想学习 Perl5 面向对象编程(OOP),可以参考下面的攻略: 第1页 什么是面向对象编程? 对象是什么? 对象是程序中的一个实体,它包括一些属性和可以对这些属性执行的操作。 面向对象编程(OOP)是什么? OOP 是一种编程范式,使用面向对象的方式描述和解决问题。在 OOP 中,程序被组织成对象,对象之间可以互相交互来完成任务。 这里还需要注意 OO…

    人工智能概论 2023年5月25日
    00
  • 联想拯救者Y9000P 2022款值得入手吗 联想拯救者Y9000P 2022游戏本深度评测

    联想拯救者Y9000P 2022款的评测 一、外观设计 联想拯救者Y9000P 2022款采用了与上一代相同的黑色金属机身,看起来非常稳重、沉稳。机身采用了镜面印花技术和雾面工艺,让整体外观更加细腻,而且不容易留下指纹和污渍。键盘背光也经过了升级,按下键盘之后的反馈更加顺畅,手感更加舒适。 另外,拯救者Y9000P 2022款还加入了最新的2.5K OLED…

    人工智能概览 2023年5月25日
    00
  • Django 后台带有字典的列表数据与页面js交互实例

    下面我将为你详细讲解如何通过 Django 后台带有字典的列表数据与页面 js 交互的步骤: 确定需求 首先,需要确定我们的需求。我们希望在 Django 后台中展示一个字典的列表数据,并且希望用户可以通过 js 在页面中对这些数据进行操作,比如进行排序、过滤等操作。为了实现这个目标,我们需要完成以下几个步骤: 在 Django 后台中创建一个字典的列表视图…

    人工智能概论 2023年5月25日
    00
  • 关于C++中的static关键字的总结

    我将为您详细讲解C++中的static关键字的总结。 static关键字的含义 在C++中,static关键字有两种含义:一种在函数内部使用,另一种在类中使用。 在函数内部使用 在函数内部使用static关键字可以将该函数定义为静态函数,即该函数只能在当前文件中使用,不能被其他文件调用。这种函数的作用主要是为了管理当前文件的内部细节,避免其他文件误用或者篡改…

    人工智能概览 2023年5月25日
    00
  • java实现百度云文字识别接口代码

    简介 百度云文字识别接口是一款强大的OCR文字识别服务,可以帮助开发者快速识别各种场景下的文字,例如照片中的文字、屏幕截图中的文字、PDF文档中的文字等。其中,在Java应用程序中使用百度云文字识别服务,并不需要太多的开发经验,只需要使用百度云文字识别API和Java SDK即可。 下面,我们将详细说明如何使用Java代码实现百度云文字识别接口。 步骤 步骤…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部