vue2.0-axios-MongoDB-express 实现增删改查功能
2018-02-06 16:24
1016 查看
附上GitHub地址 点击打开链接https://github.com/qiuwenju/vue-mongo-express
先看效果图注册功能
![](https://img-blog.csdn.net/20180206151335670?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc5MTk3OTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
此时查询表单时已经有这条数据了
![](https://img-blog.csdn.net/20180206151959729?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc5MTk3OTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
其他的登录和修改密码删除账号也都是这个页面 只不过提示信息不同。
全局安装 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文件
然后我们先将静态页面写出来,我这里文件名为login.vue。
![](https://img-blog.csdn.net/20180206154345782?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc5MTk3OTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
修改此文件<template></template>部分为:
<style></style>部分修改为如下:
<script></script>部分修改为如下:
aaa0
击打开链接
安装好之后,打开任务管理器,在服务里可看到如下即可
![](https://img-blog.csdn.net/20180206162201556?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc5MTk3OTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
然后再到mogo目录下打开命令行,安装mongoose以及express依赖
$ npm install --save mongoose 以及 npm install --save express
在到src目录下创建server文件夹,文件夹里面创建3个js文件分别为api.js(具体接口文件),index.js(后台服务开启入口文件),db.js(连接数据库js文件)。目录如下:
![](https://img-blog.csdn.net/20180206160647617?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc5MTk3OTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
入口文件index.js代码:
先看效果图注册功能
此时查询表单时已经有这条数据了
其他的登录和修改密码删除账号也都是这个页面 只不过提示信息不同。
首先前台部分 我们使用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 ,
具体安装步骤 可根据这套教程一步一步安装 点aaa0
击打开链接
安装好之后,打开任务管理器,在服务里可看到如下即可
然后再到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,如下即为成功:
相关文章推荐
- Vue2.0 v-for filter列表过滤功能的实现
- [置顶] 基于mongodb+express+vue+axios+bootstrap的掘金最热文章收藏评论分析
- mongodb的使用方法,增删改查功能的实现
- VUE2.0增删改查的实现
- vue2.0使用Sortable.js实现的拖拽功能
- Vue2.0 项目实战案例及Demo,基于vue2.0+vuex+vue-router+axios实现
- 详解Vue+axios+Node+express实现文件上传(用户头像上传)
- Vue2.0+ElementUi封装table组件实现分页功能
- Node.js+Express+MongoDB实现简单登录注册功能
- vue.js 使用axios实现下载功能的示例
- Vue2.0结合webuploader实现文件分片上传功能
- Vue2.0与 [百度地图] 结合使用———vue+webpack+axios+百度地图实现组件之间的通信
- Vue实现增删改查功能
- Node+Express+MongoDB实现登录注册功能
- Vue2.0与 [百度地图] 结合使用———vue+webpack+axios+百度地图实现组件之间的通信
- Vue+Vue Router+Axios+Webpack+Flask+MySQL实现简单的注册、登录验证功能
- 掘金最热文章收藏评论分析代码实现(mongodb+express+vue)
- Node对MongoDB实现增删改查,分页功能
- vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
- vue2.0使用Sortable.js实现的拖拽功能示例