打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
nodejs vue vuex mysql element-ui搭建后台管理系统,增删改查功能

该项目目录如下:

node后端服务入口文件index.js

// node 后端服务器const userApi = require('./api/user');const articleApi = require('./api/article');const fs = require('fs');const path = require('path');const bodyParser = require('body-parser');const express = require('express');const app = express();app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: false}));// 后端api路由app.use('/api/user', userApi);app.use('/api/article', articleApi)// 监听端口app.listen(3001);console.log('success listen at port:3001......');

连接数据库db.js

// 数据库连接配置module.exports = {    mysql: {        host: 'localhost',        user: 'root',        password: 'root',        database: 'user',        port: '3306'    }}

 该项目我把所有sql语句单独抽取出来放在sql.js文件里面:

// sql语句var sql = {    // 用户    user: {        login: 'select * from admin_user where userName = ? and passWord = ?',        queryUserList: 'select * from user',        createUser: 'INSERT INTO user (userId, userName, createDate, nickName, passWord) VALUES (?,?,?,?,?)'    },    article: {        query: 'select * from article',        queryById: 'select * from article where discuss_id = ?',        create: 'INSERT INTO article (title, content, keyword, type_id, type_name) VALUES (?,?,?,?,?)',        delete: 'delete from article where discuss_id = ?',        update: 'update article set title=?,content=?,keyword=? where discuss_id = ?',        queryArticleType: 'select * from article_type',        createArticleType: 'INSERT INTO article_type (typeId, typeName, createDate) VALUES (?,?,?)',        queryArticleTypeById: 'select * from article_type where typeId = ?'    }}    module.exports = sql;

server目录下api文件夹下的文件是最核心的,服务端增删改查的业务逻辑代码都在这里面,例如 user.js

var models = require('../db');var express = require('express');const jwt = require('jsonwebtoken');var uuid = require('node-uuid');var router = express.Router();var mysql = require('mysql');var $sql = require('../sql');// 连接数据库var conn = mysql.createConnection(models.mysql);conn.connect();// 登录接口router.post('/login', (req, res) => {  var sql = $sql.user.login;  var params = req.body;  console.log(params);  conn.query(sql, [params.userName, params.passWord], function (err, result) {    var data = JSON.parse(JSON.stringify(result))    if (data.length === 0) {      return res.send({        status: 1,        msg: "用户名或密码错误"      })    } else {      let content = {        userName: params.userName      }      let secretOrPrivateKey = "_jwt"; // 这是加密的key(密钥)      let token = jwt.sign(content, secretOrPrivateKey, {        expiresIn: 60 * 60 * 1 // 1小时过期      });      return res.send({        status: 1,        msg: "登录成功",        userName: params.userName,        token: token      })    }  })});// 创建用户router.post('/createUser', (req, res) => {  var sql = $sql.user.createUser;  console.log(req);  conn.query(sql, [req.body.userId, req.body.userName, req.body.createDate, req.body.nickName, req.body.passWord], function (err, result) {    var data = req.body;    console.log(result)    return res.send({      status: 1,      msg: "新增成功",      data: data    })  })});// 查询用户列表router.post('/getUserList', (req, res) => {  var sql = $sql.user.queryUserList;  var params = req.body;  // console.log(params);  conn.query(sql, [], function (err, result) {    var data = JSON.parse(JSON.stringify(result))        return res.send({      status: 1,      msg: "查询成功",      list: data    })  })});module.exports = router;

 下面再看看,前端是怎么调后台接口:

auth.js代码:

import Cookies from 'js-cookie'const TokenKey = 'id_token'const name = "userName"const json = 'tree'const id = "discussId"export function getToken () {  return Cookies.get(TokenKey)}export function setToken (token) {  return Cookies.set(TokenKey, token)}export function setUserName (userName) {  return Cookies.set(name, userName)}export function getUserName () {  return Cookies.get(name)}export function removeToken () {  return Cookies.remove(TokenKey)}export function setJson (data) {  return Cookies.set(json, data)}export function setDiscussId (data) {  return Cookies.set(id, data)}export function getDiscussId() {  return Cookies.get(id)}

request.js代码:

import axios from 'axios'import store from '../store'import { getToken } from '@/utils/auth'// 创建axios实例const service = axios.create({  // baseURL: 'http://localhost:8090',  timeout: 15000 // 请求超时时间})// request拦截器service.interceptors.request.use(  config => {    if (store.getters.token) {      config.headers = {        // 判断是否存在token,如果存在的话,则每个http header都加上token        authorization: 'Bearer '   getToken(),        'Content-Type': 'application/json;charset=UTF-8',        Accept: 'application/json, */*'      }    } else {      config.headers = {        'Content-Type': 'application/json;charset=UTF-8',        Accept: 'application/json, text/plain, */*'      }    }    return config  },  error => {    console.log(error) // for debug    Promise.reject(error)  })// respone拦截器service.interceptors.response.use(  response => {    return response.data  },  error => {    console.log('err'   error) // for debug    return Promise.reject(error)  })export default service

 

页面调用方式这里以登录功能为例:

Login.vue代码:

<template>    <!-- <div class="login-box">        <h1>登录页</h1>        <form>            <input type="text" name="username" v-model="userName"> <br>            <input type="text" name="age" v-model="age"> <br>            <a href="javascript:;" @click="addUser">提交</a>        </form>    </div> -->    <div class="bg-container">        <div class="login-form">            <div style="font-size: 20px; font-weight: 300; color: #fff">程序猿博客后台管理系统</div>            <div>                <el-form label-width="80px" class="login-box">                    <el-form-item label="账号" prop="userName">                        <el-input type="text" placeholder="请输入账号" v-model="userName" />                    </el-form-item>                    <el-form-item label="密码" prop="passWord">                        <el-input type="password" placeholder="请输入密码" v-model="passWord" />                    </el-form-item>                    <el-form-item>                        <el-button type="primary" @click="onSubmit">登录</el-button>                    </el-form-item>                </el-form>            </div>        </div>        <div class="footer">            <div class="copyright">                <span>Copyright &copy; 2019 程序猿博客股份有限公司</span>            </div>        </div>    </div></template><script>import { setToken, setUserName } from "@/utils/auth";import request from "@/utils/request";export default {  name: "login",  data() {    return {      userName: "admin",      passWord: "admin"    };  },  methods: {    onSubmit() {      var userName = this.userName;      var passWord = this.passWord;      request({        url: "/api/user/login",        method: "post",        data: {          userName,          passWord        }      }).then(res => {        if (res.msg === "登录成功") {          this.$message({            message: "恭喜你,登录成功",            type: "success"          });          setToken(res.token);          setUserName(res.userName);          this.$router.push("home");        }      });    }  }};</script><style scoped>.el-form-item__label{  color: #fff;}.bg-container {  width: 100%;  height: 900px;  overflow: hidden;  margin: 0;  /* background-image: url('../../assets/login_bg.jpg'); */}.footer {  position: absolute;  bottom: 0;  width: 100%;  margin: 0 auto;  height: 30px;  line-height: 20px;  padding-top: 5px;  padding-bottom: 5px;}.footer .copyright {  font-size: 12px;  text-align: center;  width: 100%;  /* color: #fff; */  opacity: 0.5;}.login-form {  position: absolute;  left: 50%;  top: 35%;  transform: translate(-50%, -50%);}/* h2 {    color: #fff;  } */.login-box {  border: 1px solid #dcdfe6;  width: 350px;  margin: 80px auto;  padding: 35px 35px 15px 35px;  border-radius: 5px;  -webkit-border-radius: 5px;  -moz-border-radius: 5px;  box-shadow: 0 0 25px #909399;}</style>

表结构如下(具体字段名可以看sql语句): 

 

 

 

 

 

来源:https://www.icode9.com/content-2-445451.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
认证授权基础
《上海悠悠接口自动化平台》-1.新增API 与 各参数的描述
python:接口开发
koa2实现jwt登录
详解 Cookie,Session,Token
TDesign中后台管理系统-用户登录
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服