Node+Mysql+Vue实现登陆注册功能 - 入门(内含HTTPS环境)

写在前面

不少前端小伙伴都尝试着使用vue构建前端项目时,使用的数据都是假数据,可是注册登陆功能很难使用假数据进行测试,这篇文章就手把手教你如何使用node作后端,mysql作数据库实现登陆注册功能。本文基于vue-cli入门(四)——vue-resource登陆注册实现Vue+MySQL+Express小试牛刀进行拓展。javascript

Mysql配置

图片描述
对于没有接触过数据库的小伙伴,我推荐下载XAMPP
这个比较轻量级,简单易用。具体步骤以下html

  1. 列表项目
  2. 建立数据库
  3. 进入xampp - mysql - bin - mysql.exe
  4. 输入如下命令:前端

    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;
  5. 以后点击xampp的Admin,你会发如今test下有个user表,这样你就已经建好数据库了

Node 文件

在根文件夹下新建一个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
在工做场景中,通常是 先后端分离,后端给接口完成注册登陆功能
  1. 在server文件夹下shift+右键 ,选择在此打开命令窗口
  2. 输入 npm install -g nodemon 回车
  3. 下载完成后输出 nodemon index
  4. 启动服务器后,才能访问

图片描述

个人一个完整项目,欢迎Watch和start!

仿拉勾网移动端页面
因此得坑都填完了,本文仅适用于前端没有接触后端的小伙伴。
当你读到这里的时候而且本身尝试着作了以后,恭喜你已经入门全栈了。
最后,再次感谢海岛心heyyuanyuanispeaksql

HTTPS

代码库更新:添加HTTPS环境支持
如何在5分钟内让HTTPS在本地开发环境中运行
具体代码参见commit
⚠️若是不想搭建https环境请删除指定commit代码


参考

相关文章
相关标签/搜索