Node.js+express+MySQL仿美团注册登录绑定第三方登录

原文连接

准备

在开始做这个前,希望你已经配置好的Node,express和MySQL的开发环境。也可以参考参考文章

开发环境的配置

  • 新建项目
    参考Mac下express的安装和新建项目
  • mysql模块
    package.json文件的dependencies下加入下面的代码"mysql": "latest",
    最终的效果:
    package
    然后cd到项目所在的目录,在终端中执行npm install,项目就会配置mysql模块。
  • 新建数据库配置文件
    在项目目录下新建一个db目录,在目录项新建两个文件DBConfig.jsusersql.js
    效果如下:
    xiaoguo1
    其中的DBConfig.js是数据库的配置文件,只要代码如下:
module.exports =
{  
    mysql: {   
        user: 'root',
        password: '123456',
        database: 'userinfo'
    }
};

就是数据库的用户名,密码和数据库名。如果你的数据库和代码不再一个电脑就需要数据库的地址。
usersql.js就是实现后台业务所需要的mysql的操作语句

var UserSQL = {  
    insert:'INSERT INTO user(username,password,date,type,openid) VALUES(?,?,?,?,?)', 
    bangding:'UPDATE user SET type = ?,openid = ? WHERE username = ? AND password = ? ',
    queryAll:'SELECT * FROM user',  
    getUserByOpenid:'SELECT * FROM user WHERE openid = ? ', 
    getUserByInfo:'SELECT * FROM user WHERE username = ? AND password = ? ',
    deleteUserByInfo:'DELETE FROM user WHERE username = ? AND password = ? ',
};
module.exports = UserSQL;

实现后台业务

  • 业务流程
    在实现业务之前还是先看看流程,我在用了美团app后自己画了一个美团登录和绑定第三方的简单流程。其中注册流程也简化了。
    xming
    关于注册我也简化了,就是输入账号和密码就可以注册。
  • 代码实现
    我的具体业务是写在users.js
    前提是已经建立了对应的数据库和表。
    首先要引入mysql依赖
// 导入MySQL模块
var dbConfig = require('../db/DBConfig');
var User = require('../db/usersql');

var mysql = require('mysql'); // 引入mysql依赖
var client = mysql.createConnection(dbConfig.mysql); // 建立连接
  • 首先看看注册流程:
    1.用户输入用户名和密码,点击注册按钮,发送注册请求;
    2.后台根据用户提交的用户名和密码去数据区查找有没有对应的用户,
    1. 没有,注册成功,把新用户插入数据库 同时记录注册时间
    2. 有,注册失败,用户已经存在
// 注册接口
router.all('/user/register', function(req, res, next){
    if (req.method == "POST") {
        var param = req.body;
    } else{
        var param = req.query || req.params; 
    }
    client.query(User.getUserByInfo,[param.username,param.password],function (err, results){
        if (err){
            throw err
       }else{
                // 数据库不存在 就注册成功
                if (results.length == 0) {
                    // 把新用户插入数据库
                    client.query(User.insert,[param.username,param.password,getDataStr(),'',''],function (err, results) {
                    if(err){
                        throw err
                    }else{
                        res.end(JSON.stringify({status:'100',msg:'注册成功!'}));
                    }
                })
                } else{ // 数据库存在就注册失败
                    res.end(JSON.stringify({status:'101',msg:'该用户名已经被注册'}));    
                }
       }
    })
});
  • 登录流程
    登录就是更具用户提交过来的用户名和密码去数据区比较,用户名和密码都相同就登录,否则就提示用户名或密码错误。
    当然这是简单的,还要做的就是是否存在这个用户。
// 登录接口
router.all('/user/login', function(req, res, next){
    if (req.method == "POST") {
        var param = req.body;
    } else{
        var param = req.query || req.params; 
    } 
    client.query(User.getUserByInfo,[param.username,param.password],function (err, results){
        if (err){
            throw err
        }else{
                // 数据库存在 
                if (results.length == 0) {
                    res.end(JSON.stringify({status:'102',msg:'用户名或密码错误'}));
                } else{ 
                    if (results[0].username == param.username && results[0].password == param.password) {
                        res.end(JSON.stringify({status:'100',msg:'登录成功'}));
                    }
                }
       }
    })
});
  • 第三方登录
    第三方登录有这么两步:
    根据用户的第三方用户唯一标识,这里统称openid去数据库查找
    1. 数据库的某个用户的openid和这个相等就返回注册成功
    2. 数据库没有就,跳转到绑定页面,做绑定用户名的操作
      这里,为了前台能够判断用户是否绑定了,我给了一个flag字段。
// 第三方登陆接口
router.all('/user/thirdlogin', function(req, res, next){
    if (req.method == "POST") {
        var param = req.body;
    } else{
        var param = req.query || req.params; 
    } 
    console.log(param.openid);
    client.query(User.getUserByOpenid,[param.openid],function (err, results){
        if (err){
            throw err
        }else{
                // 数据库不存在 就跳转绑定  flag=1 需要绑定  flag=2 // 不需要绑定
                if (results.length == 0) {
                    res.end(JSON.stringify({status:'100',msg:'操作成功',flag:'1'}));
                } else{ // 数据库存在就登录成功
                    res.end(JSON.stringify({status:'100',msg:'登录成功',flag:'2'}));
                }
       }
    })
});
  • 绑定用户
    这个就没什么了。就是更新用户的数据
// 绑定接口
router.all('/user/bangding', function(req, res, next){
    if (req.method == "POST") {
        var param = req.body;
    } else{
        var param = req.query || req.params; 
    }
    client.query(User.getUserByInfo,[param.username,param.password],function (err, results){
        if (err){
            throw err
       }else{
                // 更新用户信息
                client.query(User.bangding,[param.type,param.openid,param.username,param.password],function (err, results) {
                if(err){
                    throw err
                }else{
                    res.end(JSON.stringify({status:'100',msg:'绑定成功!'}));
                }
            })
       }
    })
});

测试

以上的流程基本是最简单的了。
测试可以在浏览器测试,根据接口输入对应的参数即可。我是自己写了一个简单的测试app。
我是事先在数据库插入了一些数据。
app效果:
app

总结

以前一直都是写iOS的app或是H5的app。这次自己独自写前后台。算是一下小小的突破。
前后台一起写的时候,发现前后台,需要很多的配合。以前只是接口不对了就找后台修改。这次就是自己修改了。
这需要很多的配合。就像月初做那个物流管理的app。后台人员我就不吐槽了。我都想找他把数据库的地址用户名和密码
要过来,我自己写后台算了。
要学习的还有很多,遇见问题不要怕,仔细的看报错信息,自己先静下心来思考,看文档。不懂再上网搜索。

前后端分离是一种开发模式,它将前端和后端的开发分离,前端主要负责用户界面的展示和交互,后端主要负责数据的处理和存储。Vue2、Node.jsMySQL可以结合使用来实现前后端分离。 首先,我们可以使用Vue2作为前端框架,通过它来开发用户界面。Vue2提供了一套响应式的数据绑定和组件化的架构,使得前端开发更加高效和灵活。我们可以使用Vue的官方脚手架工具vue-cli来快速搭建项目的基础结构。 其次,Node.js可以用作后端技术,作为一个基于事件驱动的服务器端JavaScript运行环境,它提供了丰富的模块和工具,使得后端开发更加便捷。我们可以使用Express框架来构建Node.js的后端应用,通过定义路由和处理请求,与前端进行数据的交互。 最后,MySQL是一个开源的关系型数据库管理系统,它可以存储和管理数据。我们可以使用Node.jsmysql库来连接和操作MySQL数据库,通过编写SQL语句来实现数据的增删改查。 在实际开发中,前端通过Ajax或者Axios等工具向后端发送请求,后端接收请求后,通过与MySQL数据库的交互来获取或处理数据,并将结果返回给前端。前端通过Vue2的数据绑定和渲染机制,将后端返回的数据展示在用户界面上。 通过Vue2、Node.jsMySQL的组合,我们可以实现一个完整的前后端分离的应用程序。Vue2提供了优秀的用户界面,Node.js作为后端技术提供了强大的功能和灵活性,MySQL作为数据库管理系统提供了数据的存储和管理。这样的开发模式可以提高开发效率和代码的维护性,同时也能够实现更好的用户体验和性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值