Node实战系列:零基础入门之登录注册(03天)

685 阅读3分钟

一:nginx配置

我们遇到的系统基本都少不了注册和登录功能,今天我们就来简单的说下这个过程。 我的是以node作为后台,接受前端的请求数据返回数据给前端,前端在这一入门系列中。由于前端浏览器请求有跨域问题,这里我用nginx配置了一下代码。

雷震子
雷震子
前端访问请求统一在一个index.html文件中(ps,你可以用postman或postwomen)发请求,就不用写这index.html和nginx配置。
雷震子
雷震子

二:数据库表建立

首先你要注册,这时候就需要有一张用户表来保存注册的数据。我们简单的就需要姓名,密码,手机号,这三个字段。对于注册和登录中需要验证,加密,解密之类的,这里就不说了。用本地的Mysql新建t_user表。

雷震子
雷震子

三:创建统一的返回对象

class Response {
    constructor(isSuc, msg, code, result) {
        this.isSuc = isSuc;
        this.msg = msg;
        this.code = code;
        this.result = result;
    }
}
module.exports = Response;

四:注册接口

var logger = require('../logConfig');
var connection = require('../sqlConfig');
var Response = require('./response');

function register(req, res) {
    //打印请求报文
    var param = req.body;
    var username = param.username;
    var password = param.password;
    var phone = param.phone;
    var response = new Response(false, '', -1);
    if (username && password && phone) {
        //1、查看数据库中是否有相同用户名
        connection.query("select * from t_user where username = ?", [username], function (error, results, fields) {
            if (error) throw error;
            if (results.length >= 1) {
                //2、如果有相同用户名,则注册失败,用户名重复
                response = new Response(false, '注册失败,用户名重复', -1);
                //打印响应报文
                logger.info(response);
                res.send(response);
            } else {
                connection.query("insert into t_user(username,password,phone) VALUES(?,?,?)", [username, password, phone], function (error, results, fields) {
                    if (error) throw error;
                    //3、如果没有相同用户名,并且有一条记录,则注册成功
                    if (results.affectedRows == 1) {
                        response = new Response(false, '注册成功', 1);
                        logger.info(response);
                        res.send(response);
                    } else {
                        response = new Response(false, '注册失败', -1);
                        logger.info(response);
                        res.send(response);
                    }
                });
            }
        })
    } else {
        response = new Response(false, '注册失败,用户名、密码、用户号不能为空', -1);
        logger.info(response);
        res.send(response);
    }
}
module.exports = register;

五:登录接口

var logger = require('../logConfig');
var connection = require('../sqlConfig');
var Response = require('./response');
function login(req, res) {
    //打印请求报文
    var param = req.body;
    var username = param.username;
    var password = param.password;
    var response = new Response(false, '', -1);
    if (username && password) {
        //1、查询数据库中是否有用户名
        connection.query("select * from t_user where username = ?", [username], function (error, results, fields) {
            if (error) throw error;
            if (results.length >= 1) {
                //2、如果有用户名,查询密码是否相同
                if (password == results[0].password) {
                    //3、密码相同则登陆成功
                    response = new Response(true, '登陆成功', 1);
                    logger.info(response);
                    res.send(response);
                } else {
                    response = new Response(true, '登陆失败,密码错误', -1);
                    logger.info(response);
                    res.send(response);
                }
            } else {
                response = new Response(false, '登陆失败,没有此用户名', -1);
                logger.info(response);
                res.send(response);
            }
        });
    } else {
        response = new Response(false, '登陆失败,用户名或密码不能为空', -1);
        //打印响应报文
        logger.info(response);
        res.send(response);
    }
}
module.exports = login;

六:创建统一服务入口(后续接口都写在这里,就不会再列出来了)

var express = require('express');
var app = express();
var bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))
//设置跨域访问
app.all('*', function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});
var register = require('./api/register'); // 注册
var login = require('./api/login'); // 登录
app.post('/register', (req, res) => register(req, res));
app.post('/login', (req, res) => login(req, res));
// 我们可以uncaughtException来全局捕获未捕获的Error,同时你还可以将此函数的调用栈打印出来,捕获之后可以有效防止node进程退出
process.on('uncaughtException', function (err) {
    //打印出错误
    console.log(err);
    //打印出错误的调用栈方便调试
    console.log(err.stack);
});
// connection.end();
app.listen(3000, function () {    ////监听3000端口
    console.log('Server running  main.js  at 3000 port');
});

七:登录接口已经写好了,就是验证时候了

再文章开头Nginx配置那里已经把注册接口显示出来了,接下来就看登录了。

雷震子
雷震子
我们看看数据库是否有了
雷震子
雷震子
我们的登录和注册就完成了哈。是不是觉得很简单呢??透漏一下下期内容,就是商品的增删改查了。

(ps:有些代码是截图的,可能会复制不了,最后我会上传到github,你可以把代码下载下来哈哈哈。。。)