node.js 链接数据库实现vue与后端交互

首先实现vue前端的简单页面,本页面是采用vue@cli构建项目,项目实现简单的登录注册功能,利用express进行网络通信。

1:前端vue项目

设置vue.config.js:设置跨域相关(本身是在自己电脑上启动两个服务器一个后端服务器一个是vue启动的服务端口不同会造成跨域的问题)

module.exports = {
    publicPath: '/',
    devServer: {
        proxy: {
            '/api/login': {
                target: 'http://localhost:3000/login',
                changeOrigin: true,
                ws: true,
                pathRewrite: {
                  '^/api/login': ''
                }
            },
            '/api/register': {
                target: 'http://localhost:3000/register',
                changeOrigin: true,
                ws: true,
                pathRewrite: {
                  '^/api/register': ''
                }
            }
        }
    }
}

login.vue

<template>
  <div class="hello">
    <div class="loginWrapper">
      <input type="text" v-model="form.username" placeholder="请输入用户名"/>
      <input type="password" v-model="form.password" placeholder="请输入密码"/>
      <div class="btns">
        <button @click="register">注册</button>
        <button @click="login">登录</button>
      </div>
    </div>
  </div>
</template>

<script>
import axios from "axios";
import api from "../api/index.js"

export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  data() {
    return {
      message: "",
      form: {
        username: "",
        password: ""
      }
    }
  },
  async created () {
    console.log("msg is ",this.msg);
    console.log("开始请求");
    let res = await axios.get(api.data);
    console.log("res is ",res);
    this.message = res.data.message;
  },
  methods: {
    async register() {
      let form = this.form;
      if(this.form.username !== "" && this.form.password !== "") {
        let registerRes = await axios.request({
          url: '/api/register',
          method: "POST",
          data: form
        });
        console.log("registerRes is ",registerRes);
      }
    },
    async login() {
      console.log("username is ",this.form.username);
      console.log("password is ",this.form.password);
      let form = this.form;
      let loginRes = await axios.request({
        url: '/api/login',
        method: "POST",
        data: form,
      });
      console.log("loginRes is ",loginRes);
      
    }
  },
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">
.loginWrapper{
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: center;
}
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

2:服务端index.js

const express = require("express");
const crypto = require("crypto");
const bodyParser = require("body-parser");
const app = express();
const connection = require("../dao/index.js");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.get("/", (req,res) => {
    // 得到get请求的参数 使用query
    console.log(req.query);
    res.send("hello world dfasd");
});
app.get("/data",(req,res) => {
    // res.writeHead("Access-Control-Allow-Origin","*");
    res.setHeader("Access-Control-Allow-Origin","*");
    let data = {
        message: "hello",
        status: 200,
        data: {
            name: "lck",
            age: 34,
            sex: 0
        }
    }
    res.send(JSON.stringify(data));
});
app.post("/login",async (req,res,next) => {
    console.log("req is ",req.body);
    let username = req.body.username;
    let password = req.body.password;
    let self = this;
    let realPassword = Util.md5(Util.md5(password).substr(10,20) + Util.md5(password));
    console.log("realPassword is ",realPassword);
    try {
        const insertRes = await new Promise((resolve,reject) => {
            let addUser = "select * from user where username = ?";
            let queryParams = [username];
            connection.query(addUser,queryParams,(err,result) => {
                try {
                    console.log("result is ",result);
                    resolve(result);
                } catch(e) {
                    console.log("e is ",e);
                    reject();
                }
            })
        });
        if(insertRes.length > 0) {
            console.log("insertRes is ",insertRes[0]);
            console.log("insertRes is ",insertRes[0].password === realPassword);
            if(insertRes[0].password === realPassword) {
                res.send({message: "ok",status: 200});
            } else {
                res.send({message: "密码错误",status: 200});
            }
        } else {
            res.send({message: "用户名不存在",status: 400});
        }
    } catch(e) {
        console.log("e is ",e);
        res.send({message: "no",status: 400});
    }
});
app.post("/register",async (req,res,next) => {
    let hashes = crypto.getHashes();
    let keyhash = crypto.createHmac('md5',req.body.password)
                  .update('I love cupcakes')
                  .digest('hex');
    console.log("hashes is ",keyhash);
    let username = req.body.username;
    let password = req.body.password;
    try {
        const insertRes = await new Promise((resolve,reject) => {
            let addUser = `insert into user(id,username,password,gender) values(null,?,?,?)`;
            let addParams = [username,keyhash,1];
            connection.query(addUser,addParams,(err,result) => {
                console.log("result is ",result);
                resolve(result);
            })
        });
        res.send({message: "ok",status: 200});
    } catch(e) {
        res.send({message: "no",status: 400});
    }
})
let server = app.listen(3000,() => {
    let host = server.address().address;
    let port = server.address().port;
    console.info("host is ",host," port is ",port);
})

dao层index.js

const mysql = require("mysql");
const connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "密码",
    database: "数据库名"
});
connection.connect();
module.exports = connection;

这样只是简单的一些关于express,mysql的简单操作,在此记录下express使用的流程(接收post请求参数和链接数据库对数据库进行操作的具体细节)哪里不适还请各位大佬指正

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 课程设计-基于Vue+Express实现的新闻聚合网站项目源码+运行说明(含前端+后端).zip 本次项目是Web编程项目demo,为新闻聚合网站(聚合了网易新闻/新浪新闻/新华网/人民网),在此网站中有独立的热搜模块(较为简陋),四个新闻平台热点关键词词云及其数据量,同时您可以在网站中进行筛选搜索,结果会以模态框形式弹出,点击对应的结果即可跳转到对应的新闻原URL,所有结果均为定时爬虫所爬取。 本站使用了Vue3+NaiveUI作为前端框架与组件,使用了Nodejs+Express作为项目后端,阿里云MySQL数据库作为项目数据库。 项目运行 本项目前后端分离,前端为front文件夹,后端为back文件夹,进入前后端文件夹后分别运行 ```shell npm install ``` 下载相应的module文件(如果没有的话) 由于本项目为demo项目,因此并没有做过深的负载等考虑,为开发模式,仅作为演示,因此Vue项目并未打包,均为源码开发模式呈现。 在front文件夹下运行 ```shell npm run serve ``` 启动前端测试(默认运行在8080端口) 在back文件夹下运行 ```shell node main.js ``` 启动服务器(默认运行在8000端口) 然后打开浏览器访问http://localhost:8080/即可测试项目 项目组成 ### 前端 前端为单页面应用,所有交互均以模态框(或类模态框)进行,结构如下: ``` |-- front/src |-- main.js |-- App.vue |-- components | |-- Hot.vue | |-- Display.vue | |-- Result.vue |-- assets | ... ``` 其中App.vue负责整体页面(主页),Hot.vue负责热搜模态框,Display.vue负责展示模态框,Result.vue负责搜索结果展示模态框(包含分页)。 ### 后端 后端由于是第一次写nodejs后端,因此封装或者模块化都比较简陋,以后有兴趣的话可以将后端用Python或Java重写,结构如下: ``` |-- back |-- main.js |-- crawler | |-- common.js | |-- crawler.js | |-- websites | |-- wangyi.js | |-- xinlang.js | |-- xinhua.js | |-- renmin.js | ... ``` 主体部分还是在爬虫上,由于针对不同网站的爬虫会有所不同,因此我将匹配的关键词放在了websites文件夹中的每个js文件中,种子页面处理放在crawler.js中,common.js用来放一些常用模块的二次封装(或者测试的时候可以拿来用,比如我的连数据库操作是放在main中的,其他地方没有数据库,因此测试某个网站是否成功导入数据库中也可以在common中加入数据库操作并exports出来)。 其余定时器,search,热搜,展示的数据均在main.js中生成(这里是由于nodejs不太熟悉不会很好的封装,因此统一整合到了main中)
我们的项目是一个基于Node.jsVue.js的电商后台管理系统源码,旨在帮助开发人员快速构建和管理电商网站的后台系统。 我们的项目源码结合了Node.jsVue.js这两个流行的技术框架,以提供高效、可扩展和可靠的Web应用程序。 首先,我们使用了Node.js作为后端开发语言和运行环境。Node.js是一个基于Chrome V8引擎的JavaScript运行时,具有非阻塞I/O和事件驱动的特点。Node.js的优势在于其高性能和可伸缩性,使得我们的后台系统能够处理大量的并发请求,并提供快速的响应速度。 其次,我们采用了Vue.js作为前端开发框架。Vue.js是一个轻量级的JavaScript框架,用于构建用户界面。Vue.js具有响应式数据绑定、组件化开发和虚拟DOM等特性,使得我们的前端界面具有良好的可维护性和可扩展性。同时,Vue.js还提供了丰富的插件和工具,以帮助开发人员快速构建出美观、交互性强的用户界面。 我们的项目源码还使用了一些其他的技术和工具,以提高系统的性能和可靠性。我们使用了数据库来存储和管理商品信息、订单信息等数据。我们还使用了RESTful API来处理前后端的数据交互,以实现后端的解耦和灵活性。此外,我们还采用了认证和授权等安全机制,以保护用户的隐私和数据安全。 我们的项目源码具有良好的可读性和可维护性,采用了模块化的开发方式和面向口的编程原则。我们使用了MVC(Model-View-Controller)架构来分离业务逻辑和界面展示,以提高代码的可复用性和可测试性。我们还使用了依赖注入和单元测试等技术,以降低代码的耦合度和提高代码的质量。 总之,我们的电商后台管理系统源码基于Node.jsVue.js,采用了一系列先进的技术和框架,以提供高效、可扩展和可靠的电商后台管理系统。无论您是初学者还是经验丰富的开发人员,我们相信我们的源码将能够帮助您快速构建出功能强大的电商后台管理系统。
基于SSM+Vue的健身房管理系统是一个现代化、高效的管理平台,它结合了后端的Spring、SpringMVC和MyBatis框架(即SSM)以及前端的Vue.js技术。该系统旨在为健身房提供一个简洁、易用的管理工具,涵盖了会员管理、课程安排、教练管理、设备维护等多个方面。 源码介绍: 后端:使用Java语言开发,基于Spring框架进行业务处理,SpringMVC负责请求分发,MyBatis用于数据持久化。整个后端结构清晰,代码分层明确,便于维护和扩展。 前端:采用Vue.js框架,结合组件化思想构建用户界面。通过Axios与后端进行数据交互,保证了前后端分离的架构模式。 部署说明: 系统环境要求:确保已安装JDK、MySQL数据库、Maven、Node.js等必要环境。 后端部署:导入项目到IDE中,配置好数据库信息,运行Maven命令进行依赖管理和项目构建,然后启动Spring Boot应用。 前端部署:在项目根目录下运行npm install安装依赖,然后执行npm run build命令打包前端资源,最后将打包好的文件放置到后端项目的静态资源目录下。 演示视频: 为了更直观地展示系统功能,开发者提供了演示视频,其中展示了会员注册登录、课程预约、教练信息查看、设备借用等核心功能的实际操作流程。 总结: 总之这个基于SSM+Vue的健身房管理系统不仅提供了完整的健身房运营解决方案,还通过精心的设计和实现确保了系统的高性能和用户体验。无论是对于健身房业主还是管理人员,这个系统都是一个提升工作效率、优化客户体验的有力工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值