一:nginx配置
我们遇到的系统基本都少不了注册和登录功能,今天我们就来简单的说下这个过程。 我的是以node作为后台,接受前端的请求数据返回数据给前端,前端在这一入门系列中。由于前端浏览器请求有跨域问题,这里我用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配置那里已经把注册接口显示出来了,接下来就看登录了。