不少前端小伙伴都尝试着使用vue
构建前端项目时,使用的数据都是假数据
,可是注册登陆功能很难使用假数据进行测试,这篇文章就手把手教你如何使用node
作后端,mysql
作数据库实现登陆注册功能。本文基于vue-cli入门(四)——vue-resource登陆注册实现和Vue+MySQL+Express小试牛刀进行拓展。javascript
对于没有接触过数据库的小伙伴,我推荐下载XAMPP
这个比较轻量级,简单易用。具体步骤以下html
输入如下命令:前端
use test;
create table user( id int not null primary key auto_increment, username varchar(100) not null, password varchar(100) not null )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Admin
,你会发如今test下有个user表,这样你就已经建好数据库了在根文件夹下新建一个server文件,
文件结构如图vue
|-- build |-- config |-- node_modules |-- server |-- api |-- userApi.js |-- db.js |-- index.js |-- sqlMap.js |-- src |-- static |-- .babelrc |-- .editorconfig |-- .gitignore |-- index.html |-- package.json |-- README.md
db.js
----用来添加mysql配置和index.js
----Express服务器入口文件都不须要更改
原代码java
sqlMap.js----SQL语句映射文件,以供api逻辑调用node
var sqlMap = { user: { add: 'insert into user( username, password) values ( ?, ?)', select_name: 'SELECT * from user where username = ?', //查询 username select_password: 'SELECT * from user where password = ?' //查询 password } } module.exports = sqlMap;
api/userApi.js ---- 测试用api示例mysql
var models = require('../db'); var express = require('express'); var router = express.Router(); var mysql = require('mysql'); var $sql = require('../sqlMap'); // 链接数据库 var conn = mysql.createConnection(models.mysql); conn.connect(); var jsonWrite = function(res, ret) { if(typeof ret === 'undefined') { res.send('err') } else { //res.json(ret); res.send('ok') } }; // 增长用户接口 router.post('/addUser', (req, res) => { var sql_name = $sql.user.select_name var sql = $sql.user.add; var params = req.body; console.log(params); conn.query(sql_name,params.username,function(err,result) { if(err) { console.log(err) } if(result[0]===undefined) { conn.query(sql,[params.username,params.password], function(err, result) { if(err) { console.log(err) } if(result) { jsonWrite(res, result) } }) }else { res.send('-1') //当前注册username与数据库重复时,data返回-1 } }) }); //查找用户接口 router.post('/selectUser', (req,res) => { var sql_name = $sql.user.select_name; var sql_password = $sql.user.select_password; var params = req.body; conn.query(sql_name,params.username,function(err, result) { if(err) { console.log(err) } if(result[0]===undefined) { res.send('-1') //查询不出username,data返回-1 }else { conn.query(sql_password,params.password, function(err, result) { if(err) { console.log(err) } if(result[0]===undefined) { res.send('0') //username正确后,password错误,data返回 0 }else { jsonWrite(res, result); } }) } }) }); module.exports = router;
Vue-cli login-vue注册功能修改git
register(){ if(this.newUsername == "" || this.newage == ""){ alert("请输入用户名或密码") }else{ let data = {'username':this.newUsername,'age':this.newage} this.$http.post('/api/user/addUser',data).then((res)=>{ console.log(res) /*接口的传值是(-1,该用户已存在)*/ if(res.data == -1) { this.tishi = "该帐号已存在" this.showTishi = true this.username = '' this.age = '' } else if(res.status == 200){ this.tishi = "注册成功" this.showTishi = true this.username = '' this.age = '' /*注册成功以后再跳回登陆页*/ setTimeout(function(){ this.showRegister = false this.showLogin = true this.showTishi = false }.bind(this),2000) } }) } }
原代码是正确的。
可是我本身就是代理不成功,google了一下也没有解决办法,
返回看评论能够发现他们也同样,可是若是你仔细读评论,就能够找到解决办法:须要启动express服务器github
2017/10/31补充:
使用第三方接口时,别人设置跨域限制时,须要利用 反向代理
推荐 npm http-proxy-middleware
在工做场景中,通常是 先后端分离,后端给接口完成注册登陆功能
仿拉勾网移动端页面
因此得坑都填完了,本文仅适用于前端没有接触后端的小伙伴。
当你读到这里的时候而且本身尝试着作了以后,恭喜你已经入门全栈了。
最后,再次感谢海岛心hey
和yuanyuanispeak
sql
代码库更新:添加HTTPS环境支持
如何在5分钟内让HTTPS在本地开发环境中运行
具体代码参见commit
⚠️若是不想搭建https环境请删除指定commit代码