配置webpack已经写了很多次了,这次就不写了:https://blog.csdn.net/ziyue13/article/details/121318279

先新建一个数据库test6

CREATE DATABASE test6;

新建一个用户表,储存全部的用户信息

CREATE TABLE users(id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,name1 VARCHAR(20) COMMENT '用户名',pass VARCHAR(60) COMMENT '密码'
)

新建app.vue、zhuce.vue、login.vue组件,并且配置好路由 router.js

import Vue from 'vue'
import Router from 'vue-router/dist/vue-router.js'
import login from '../components/login.vue'
import zhuce from '../components/zhuce.vue'
Vue.use(Router);
export default new Router({routes: [{path: '/',redirect:'/login'},{path: '/login',component: login},{path: '/zhuce',component: zhuce},]
})

app.vue:

<template><router-view></router-view></template><script>
</script><style></style>

login.vue:

<template><div class="div1"><form action="/login" method="post"><div class="div2">用户名:<input type="text" name="username" placeholder="请输入用户名" value=""></div><div class="div2">密码:<input type="password" name="pass" placeholder="请输入密码" value=""></div><div class="div3"><div class="div31"><button id="login">用户登录</button></div><div class="div32"><router-link to="/zhuce">用户注册</router-link></div></div></form></div>
</template><script>
</script><style>.div1{width: 500px;height: 300px;border: 1px solid #00FFFF;margin: 50px auto;}.div2{width: 300px;height: 50px;margin: 50px auto;border: 1px solid transparent;}.div3{width: 300px;height: 50px;margin: 50px auto;border: 1px solid transparent;}.div31{float: left;}.div32{float: right;}
</style>

zhuce.vue:

<template><div class="div1"><form action="/login" method="post"><div class="div2">用户名:<input type="text" name="username" placeholder="请输入用户名" value=""></div><div class="div2">密码:<input type="password" name="pass" placeholder="请输入密码" value=""></div><div class="div3"><div class="div31"><button id="login">用户登录</button></div><div class="div32"><router-link to="/zhuce">用户注册</router-link></div></div></form></div>
</template><script>
</script><style>.div1{width: 500px;height: 300px;border: 1px solid #00FFFF;margin: 50px auto;}.div2{width: 300px;height: 50px;margin: 50px auto;border: 1px solid transparent;}.div3{width: 300px;height: 50px;margin: 50px auto;border: 1px solid transparent;}.div31{float: left;}.div32{float: right;}
</style>


服务器创建连接MySQL:

var mysql = require('mysql');
var connection = mysql.createConnection({     host     : 'localhost',       user     : 'root',              password : '1234',       port: '3306',                   database: 'test6'
}); //连接MySQL
connection.connect();

创建一个请求路径为/zhuce的post请求,接收请求参数,并加密保存到数据库之中

app.post('/zhuce',async (req,res)=>{const {username,pass} = req.body;//生成盐值const salt = await bcrypt.genSalt(10);//密码加密const result = await bcrypt.hash(pass,salt);var  addSql = 'INSERT INTO users(name1,pass) VALUES(?,?)';var  addSqlParams = [username, result];connection.query(addSql,addSqlParams,function (err, result) {if(err){console.log('[INSERT ERROR] - ',err.message);return;}        console.log('--------------------------INSERT----------------------------');//console.log('INSERT ID:',result.insertId);        console.log('INSERT ID:',result);        console.log('-----------------------------------------------------------------\n\n');  });res.redirect('/index.html');
})


数据库结果:

再写一个请求路径为login的post请求:

app.post('/login',async (req,res)=>{const {username,pass} = req.body;//拼接查询数据库代码var sql = "select pass from users where name1="+"'"+username+"'";var k;connection.query(sql, function (err, result, fields) {if(err){//err.message会返回错误的信息console.log('[SELECT ERROR] - ',err.message);return;}console.log('--------------------------SELECT----------------------------');//result的结果是一个数组对象const flag = bcrypt.compare(pass,result[0].pass);if(flag){//设置session对象保存登录状态//设置session属性req.session.flag=1;res.send('登录成功');}else{res.send('登录失败');}console.log('------------------------------------------------------------\n\n');  });})

注意:因为数据库代码是异步代码,所以做查询之后的功能需要写在查询之内

设置允许跨域

//设置允许跨域
app.all("*",function(req,res,next){//设置允许跨域的域名,*代表允许任意域名跨域res.header("Access-Control-Allow-Origin","*");//允许的header类型res.header("Access-Control-Allow-Headers","Origin,X-Requested-With,Accept,Content-type");res.header("Access-Control-Allow-Credentials",true);//跨域允许的请求方式res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");res.header("Content-Type","application/json;charset=utf-8")if (req.method.toLowerCase() == 'options')res.sendStatus(200);  //让options尝试请求快速结束elsenext();
});

用node+WebSocket+MySQL+vue仿做学习通的一些功能(一):用户登录和注册页面的实现相关推荐

  1. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-6.用户登录(二),token验证

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-6.用户登录(二),token验证 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本 ...

  2. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证 技能学习:学习使用php(tp6框架) + vue.js,开发前端全 ...

  3. PHP+Mysql 实现用户登录,注册界面

    目标: 实现用户的登录 .注册 .修改密码.重置密码.添加书签,显示书签,删除书签 等功能 进一步目标: 实现对 用户输入信息的控制,具体表现在 对注册信息.登录信息的 的过滤,具有简单的防sql注入 ...

  4. 从0开始写Vue项目-Vue页面主体布局和登录、注册页面

    1.从0开始写Vue项目-环境和项目搭建_慕言要努力的博客-CSDN博客 2. 从0开始写Vue项目-Vue2集成Element-ui和后台主体框架搭建_慕言要努力的博客-CSDN博客 一.主体布局 ...

  5. 【vue】vue实现用户长时间不操作,提示用户登录已过期重新登录

    vue实现用户长时间不操作,提示用户登录已过期请重新登录 1.实现思路 使用 mouseover事件来监测是否有用户操作页面,然后写一个定时器间隔特定时间检测是否长时间未操作页面,如果是清除token ...

  6. 前端开发学习--登录和注册页面设计(html和css,可完成两个页面点击切换)

    今天学习了登录和注册页面的设计,主要是HTML和CSS部分,注册和切换采用了Js代码进行,后面将通过js进行填写内容的验证,进而可通过JSP跳转到Servlet进行DAO数据的校验,这属于后端部分了. ...

  7. 用python和mysql做注册登录系统_python3.6 下连接mysql数据库实现用户登录与注册

    在python3.6中连接数据库只能使用pymysql包,安装方法直接通过pip install pymysql安装即可,较为方便. 初学者一定要做的便是用户的注册与登录,同时牵涉到数据库的相关操作, ...

  8. Vue项目实战之电商后台管理系统(一) 用户登录模块

    目录 一.项目概述 二.项目初始化 2.1 前端项目初始化步骤 2.2 后台项目的环境安装配置 三.用户登录/登出功能实现 3.1 登录功能概述 3.1.1 登录状态保持 3.1.2 登录逻辑: 3. ...

  9. 尚硅谷谷粒学院学习笔记9--前台用户登录,注册,整合jwt,微信登录

    用户登录业务 单点登录(Single Sign On),简称SSO. 用户只需要登陆一次就可以访问所有相互信任的应用系统 单点登录三种常见方式 session广播机制实现 使用redis+cookie ...

  10. 【安卓SDK学习之anyChatSDK】 1_1 实现用户登录和房间进出(根据官方HelloAnyChat的demo整理的简要的开发流程)

    AnyChat SDK是一套多媒体即时通讯平台库,只需要几个简单的API调用,即可实现多个用户之间的语音.视频.文字交互.AnyChat支持"一对一"."一对多" ...

最新文章

  1. CSS.text不被选中
  2. 查 101.201.62.30 IP信誉方法
  3. R语言实战应用精讲50篇(三)-多重线性回归系列之模型评估与诊断应用案例
  4. netty4搭建简单的http服务器
  5. 【POJ - 3250 】Bad Hair Day (单调栈)
  6. python向量化编程技巧_神经网络基础之Python与向量化
  7. Feature pyramid networks for object detection
  8. SpringSecurity安全框架的笔记
  9. 小巷开店问题(第三题)
  10. 脂肪肝青睐“三围”人士 不吃早餐容易诱发
  11. 文本分类实战—— Bi-LSTM模型
  12. 2023海南大学计算机考研信息汇总
  13. [VB.NET]VB的vbFromUnicode、vbUnicode在vb.net中怎么使用
  14. 借助免费艾特二维码平台打造人气流量空间
  15. 2021年科学突破奖:生命科学、基础物理学和数学奖得主揭晓
  16. 关于word页眉页脚的设置-页码不连续的问题
  17. 《HTML5+CSS3网页布局和样式精粹》.(张亚飞).[PDF]ckook
  18. 2016年福建两化深度融合与新型CIO创新发展 论坛圆满落幕
  19. JavaEE 从入门到放弃
  20. MATLAB位置1无法索引,位置 1 的索引超出数组范围(不能超过 1)

热门文章

  1. 百度地图api初次申请及简单应用
  2. WebCralwer_java
  3. frp内网穿透并实现开机自启动
  4. node.js核心模块实例应用,基于nods.js环境向json文件添加数据
  5. 信创办公--基于WPS的Word最佳实践系列(修改标题样式快速实现章前分页效果)
  6. 怎样彻底删除微信聊天记录?学会这招,从此不用再砸手机也不用泡水里
  7. 计算机显示器模糊,Win10系统下电脑显示器模糊的解决方法
  8. mysql cpu 100%_mysql占用资源CPU超过100%解决方法
  9. google三篇重要论文(英文原文)
  10. python 多重类继承__init__