附上GitHub地址 点击打开链接

https://github.com/qiuwenju/vue-mongo-express

先看效果图

注册功能

 

此时查询表单时已经有这条数据了

 

其他的登录和修改密码删除账号也都是这个页面 只不过提示信息不同。

 

首先前端部分 我们使用vue-cli脚手架搭建项目,安装好element-ui和axios 。

安装之前应当下载安装node.js

 

全局安装 vue-cli

$ npm install --global vue-cli

 

创建一个基于 webpack 模板的新项目

$ vue init webpack mogo

 

安装依赖,走你

$ cd mogo

$ npm install (安装基础的依赖)

 

安装element-ui和axios 。

npm install --save axios以及npm install --save element-ui

 

然后 npm run dev 运行即可,打开浏览器访问http://localhost:8080。

 

修改src目录下的main.js文件

import Vue from 'vue'
import router from './router'
import App from './App'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import axios from 'axios'

Vue.config.productionTip = false
Vue.prototype.$http = axios
Vue.use(ElementUI)

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { 
    App
  }
})

到这里前台所需要的基础环境基本已经搭建完成。

 

然后我们先将静态页面写出来,我这里文件名为login.vue。

修改此文件<template></template>部分为:

<template>
  <div class="hello">
    <el-form :rules="rules" label-position="left" label-width="0px"
           class="demo-ruleForm login-container">
      <h3 class="title">系统登录</h3>
      <el-form-item prop="username">
        <el-input type="text" v-model="userName" auto-complete="off" placeholder="账号"></el-input>
      </el-form-item>
      <el-form-item prop="password">
        <el-input type="password" v-model="password" auto-complete="off" placeholder="密码"></el-input>
      </el-form-item>
      <el-form-item prop="newPassword">
        <el-input type="password" v-model="newPassword" auto-complete="off" placeholder="新密码"></el-input>
      </el-form-item>
      <el-checkbox v-model="checked" checked class="remember">记住密码</el-checkbox>
      <el-form-item style="width:100%;">
        <el-button type="primary" style="width:100%;" @click="loginAccount">登录</el-button>
        <el-button type="primary" style="width:100%;" @click="createAccount">注册</el-button>
        <el-button type="primary" style="width:100%;" @click="deleteAccount">删除</el-button>
        <el-button type="primary" style="width:100%;" @click="updatedAccount">修改</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

 

<style></style>部分修改为如下:

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
  .login-container {
    /*box-shadow: 0 0px 8px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02);*/
    -webkit-border-radius: 5px;
    border-radius: 5px;
    -moz-border-radius: 5px;
    background-clip: padding-box;
    margin: 0 auto;
    width: 350px;
    padding: 35px 35px 15px 35px;
    background: #fff;
    border: 1px solid #eaeaea;
    box-shadow: 0 0 25px #cac6c6;
    background: -ms-linear-gradient(top, #fff, #6495ed);        /* IE 10 */
    background:-moz-linear-gradient(top,#b8c4cb,#f6f6f8);/*火狐*/
    background:-webkit-gradient(linear, 0% 0%, 0% 100%,from(#b8c4cb), to(#f6f6f8));/*谷歌*/
    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#6495ed));      /* Safari 4-5, Chrome 1-9*/
    background: -webkit-linear-gradient(top, #fff, #6495ed,#fff);   /*Safari5.1 Chrome 10+*/
    background: -o-linear-gradient(top, #fff, #6495ed);  /*Opera 11.10+*/   
  }
  .title {
    margin: 0px auto 40px auto;
    text-align: center;
    color: #505458;
  }
  .remember {
    margin: 0px 0px 35px 0px;
  }
  button {
    margin: 20px 0 0 0 ;
  }
  .el-button+.el-button {
    margin-left: 0;
  }
</style>

 

<script></script>部分修改为如下:

<script>
export default {
  name: 'hello',
  data() {
    return {
      userName: '',
      password: '',
      newPassword: '',
      rules: {
        username: [
          {required: false, message: '请输入账号', trigger: 'blur'},
          //{ validator: validaePass }
        ],
        password: [
          {required: false, message: '请输入密码', trigger: 'blur'},
          //{ validator: validaePass2 }
        ],
        newPassword: [
          {required: false, message: '请输入新密码', trigger: 'blur'},
          //{ validator: validaePass2 }
        ]
      },
      checked: false
    }
  },
  methods: {
    createAccount() {
      let params = {
        account : this.userName,
        password : this.password
      }
      if( params.account === "" || params.password === "") {
        alert("账号和密码不能为空!")
        return false
      }
      console.log(params)
      this.$http.post('http://localhost:8088/api/login/createAccount',params)
          .then((response) => {
            let res = response.data
            console.log(res)
            alert(res.msg)
          })
          .catch((reject) => {
            console.log(reject)
          })
    },
    deleteAccount() {
      let params = {
        account : this.userName,
        password : this.password
      }
      if( params.account === "" || params.password === "") {
        alert("账号和密码不能为空!")
        return false;
      }
      console.log(params)
      this.$http.post('http://localhost:8088/api/login/deleteAccount',params)
          .then((response) => {
            let res = response.data
            //console.log(params)
            console.log(res)
            alert(res.msg)
          })
          .catch((reject) => {
            console.log(reject)
          })
    },
    loginAccount() {
      let params = {
        account : this.userName,
        password : this.password
      }
      if( params.account === "" || params.password === "") {
        alert("账号和密码不能为空!")
        return false;
      }
      this.$http.post('http://localhost:8088/api/login/loginAccount',params)
          .then((response) => {
            let res = response.data
            console.log(res)
            alert(res.msg)
            console.log()
            if(res.code == 1){
               this.$router.push({ path: '/home' });
            }
          })
          .catch((reject) => {
            console.log(reject)
          })
    },
    updatedAccount() {
      let params = {
        account : this.userName,
        password : this.password,
        newPassword : this.newPassword
      }
      if( params.account === "" || params.password === "") {
        alert("账号和密码不能为空!")
        return false;
      }
      if( params.newPassword === "" ) {
        alert("新密码不能为空!")
        return false;
      }
      this.$http.post('http://localhost:8088/api/login/updatedAccount',params)
          .then((response) => {
            let res = response.data
            console.log(res)
            alert(res.msg)
          })
          .catch((reject) => {
            console.log(reject)
          })
    }
  }
}
</script>


 

接下来后台部分 下载安装MongoDB ,

具体安装步骤  可根据这套教程一步一步安装 点击打开链接

 

安装好之后,打开任务管理器,在服务里可看到如下即可

 

然后再到mogo目录下打开命令行,安装mongoose以及express依赖

 

$ npm install --save mongoose 以及 npm install --save express

 

在到src目录下创建server文件夹,文件夹里面创建3个js文件分别为api.js(具体接口文件),index.js(后台服务开启入口文件),db.js(连接数据库js文件)。目录如下:

 

入口文件index.js代码:

const express = require('express')
const app = express()
const api = require('./api')
const fs = require('fs')
const path = require('path')
const bodyParser = require('body-parser')
const cors = require('cors')
app.use(cors({ origin: '*' }))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(api)
app.use(infor)
// 访问静态资源文件 这里是访问所有dist目录下的静态资源文件
app.use(express.static(path.resolve(__dirname, '../dist')))
// 因为是单页应用 所有请求都走/dist/index.html
app.get('*', function (req, res) {
  const html = fs.readFileSync(path.resolve(__dirname, '../../index.html'), 'utf-8')
  res.send(html)
})
// 监听8088端口
app.listen(8088)
console.log('success listen…………')

连接数据库db.js代码:

const mongoose = require('mongoose')
// 连接数据库 如果不自己创建 默认test数据库会自动生成
mongoose.connect('mongodb://localhost/test')

// 为这次连接绑定事件
const db = mongoose.connection
db.once('error', () => console.log('Mongo connection error'))
db.once('open', () => console.log('Mongo connection successed'))
/************** 定义模式loginSchema **************/
const loginSchema = mongoose.Schema({
  account: String,
  password: String,
  newPassword: String
}, { collection: 'listData' });

/************** 定义模型Model **************/
const Models = {
  Login: mongoose.model('Login', loginSchema)
}

module.exports = Models

具体接口文件api.js代码:

const models = require('./db').Login
const express = require('express')
const router = express.Router()
//const util = require("util")//可以使用 util.inspect 代替 JSON.stringify

/************** 创建(create) 读取(get) 更新(update) 删除(delete) **************/

// 创建账号接口
router.post('/api/login/createAccount', (req, res) => {
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  let newAccount = new models({
    account: req.body.account,
    password: req.body.password
  })
  //查询该账号是否已经被注册
  models.count({"account": newAccount.account },(err,docs) => {
    if(err) {
      console.log("Error:" + err)
      res.send(err)
    }else {
      //console.log("Docs:" + docs)
      if(docs>=1){
        //账号已经被注册,注册失败,返回code = 2
        console.log("注册失败")
        res.send({code:2,msg:'账号已经存在了,不能再次注册'})
      }else{
        // 账号未注册,保存数据newAccount数据进mongoDB,注册成功,返回code=1
        newAccount.save((err, data) => {
          //console.log('set')
          if (err) {
            res.send(err)
          } else {
            console.log("注册成功")
            res.send({code:1,msg:'恭喜您,账号创建成功了'})
          }
        })
      }
    }
  })
});
// 删除账号接口
router.post('/api/login/deleteAccount', (req, res) => {
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  //console.log("delete:" + req.body.account)
  //查询该账号是否已经注册
  models.count({"account": req.body.account },(err,docs) => {
    if(err) {
      console.log("Error:" + err)
      res.send(err)
    }else {
      //console.log("Docs:" + docs)
      if(docs>=1){
        // 若注册,在mongoDB中删除该条数据,返回code = -1
        models.remove({"account": req.body.account },(err) => {
          //console.log('delete')
          if (err) return handleError(err);
        });
        console.log("删除成功")
        res.send({code:-1,msg:'账号已被删除'});
      }else{
         // 若还未注册,删除失败,返回code = -2,
        console.log("删除失败")
        res.send({code:-2,msg:'账号还未注册,不能删除'});
      }
    }
  })
});
// 登录接口
router.post('/api/login/loginAccount', (req, res) => {
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  let newAccount = new models({
    account: req.body.account,
    password: req.body.password
  })
  console.log("login:" + req.body.account)
  console.log(newAccount)
 //查询该账号是否存在
  models.findOne({"account": req.body.account },(err,docs) => {
    if(err) {
      console.log("Error:" + err)
      res.send(err)
    }else {
      console.log("Docs:" + docs)
      if(!docs == ""){
        // 若存在,再验证账号密码是否正确
        //console.log('该验证账号和密码是否正确了')
        if(docs.account === newAccount.account && docs.password === newAccount.password ){
          // 登录成功,返回code = 1
          console.log('登录成功')
          //可以使用 util.inspect 代替 JSON.stringify
          //res.send(util.inspect(res,{depth:null}))
          res.send({code:1,msg:'恭喜你,登录成功了'})
        }else {
          // 登录失败,密码错误,返回code = -1
          console.log({status:'登录失败', msg :'密码错误'})
          res.send({code:-1,msg:'密码错误,请重新输入'})
        }
      }else{
        // 若不存在,登录失败,返回code = -2
        console.log({status:'登录失败', msg :'账号不存在'})
        res.send({code:-2,msg:'账号不存在,请先注册账号'})
      }
    }
  })
});
// 更新密码接口
router.post('/api/login/updatedAccount', (req, res) => {
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  let newAccount = new models({
    account: req.body.account,
    password: req.body.password,
    newPassword: req.body.newPassword
  })
  console.log("login:" + req.body.account)
  console.log(newAccount)
 //查询该账号是否存在
  models.findOne({"account": req.body.account },(err,docs) => {
    if(err) {
      console.log("Error:" + err)
      res.send(err)
    }else {
      console.log("Docs:" + docs)
      let currId = docs._id
      if(!docs == ""){
        // 若存在,再验证账号密码是否正确
        //console.log('该验证账号和密码是否正确了')
        if(docs.account === newAccount.account && docs.password === newAccount.password ){
          // 登录成功
          console.log('登录成功')
          //判断新密码是否与旧密码一致
          if(docs.password === newAccount.newPassword) {
            //更新密码失败,新密码与旧密码一致,不能修改,返回code = -1
            res.send({code:-1,msg:'修改密码失败,新密码与旧密不能一致'})
          }else {
            models.update({_id:currId},{password:newAccount.newPassword},(err) => {
              if(err){
                console.log(err);
              }else{
                console.log("更新密码成功");
                res.send({code:1,msg:'恭喜你,密码更新成功了'})
              }
            })
          }
        }else {
          // 更新密码失败,密码错误,返回code = -2
          console.log({status:'更新密码失败', msg :'密码错误'})
          res.send({code:-2,msg:'登录密码错误,不能修改密码'})
        }
      }else{
        // 若不存在,登录失败,更新密码失败,返回code = -3
        console.log({status:'登录失败', msg :'账号不存在'})
        res.send({code:-3,msg:'账号不存在,请先注册账号'})
      }
    }
  })
});

module.exports = router

注: 前台访问这些接口时,后台需要打开服务,即在server目录下打开命令行 ,运行node index.js,如下即为成功:

Logo

前往低代码交流专区

更多推荐