Node.js连接数据库实现注册,登录,在登录时检测账号是否进行注册。
准备工作 创建文件夹
此创建文件夹可以不是使用Vue-cli进行创建,只是简单创建文件夹便可。
使用npm进行mysql插件的安装,cmd黑窗口运行下列指令
npm install mysql --save
此指令运行完成,文件夹根目录出现node_modules文件
黑窗口运行npm init指令,出现package.json文件最终的根目录如下
在根目录下新建http.js文件
开始引入模块,端口
首先在http.js中引入相应模块、工具var http = require('http');//引入httpvar querystring = require('querystring'); var url = require('url'); //引入urlvar fs = require('fs'); //引入文件管理
创建一个可以访问的端口
http.createServer(function(req, res) {console.log('链接成功');_//向请求的客户端发送响应头res.writeHead(200,{'Content-Type': 'text/html; charset=urf-8'});res.end('hello word');}).listen(3000)
注意:
此处的端口使用为3000,部分可能感觉自己数据库的端口是别的内容,此处要不要更换为数据库相应。在此处进行3000的端口是可以相应操作的,与数据库端口不一致不影响使用。
检验是否成功:使用node运行http.js
黑窗口运行指令
node http.js
运行完成,在指令下方会出现如下图:
并且在浏览器输入localhost:3000,进行相应页面会看到hello word
出现上述两个结果意味着端口创建完成并且是可以成功访问的。
相关页面的操作
页面样式
在根目录下创建三个页面index.html login.html regsiter.html
最终的目录
在index.html页面的body中插入如下内容
<h1><a href="/login">登录</a><a href="/regsiter">注册</a></h1>
在login.html页面的body中插入如下内容
<h1>登录页面</h1><form method ="POST"> <p><label for="userName">用户名:</label><input type="text" id="userName" name="username" placeholder="请输入用户名"></p><p><label for="passWord">密 码:</label><input type="text" id="passWord" name="password" placeholder="请输入密码"></p><input type="submit" ></form>
在regsiter.html页面的body中插入如下内容
<h1>注册页面</h1><form method ="POST"> <p><label for="userName">用户名:</label><input type="text" id="userName" name="username" placeholder="请输入用户名"></p><p><label for="passWord">密 码:</label><input type="text" id="passWord" name="password" placeholder="请输入密码"></p><input type="submit" ></form>
页面路由构建
在http.js进行修改http.createServer(function(req, res) {if (req.url == '/favicon.ico') {return;//加载图标也会被当做一次http请求};var pathname = url.parse(req.url).pathname;//解析地址栏地址var body = '';//使用fs文件管理读取相对应文件fs.readFile(pathname.substring(1) + '.html', function(err, data) {if (err) {//如果错误存在说明文件不存在res.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});res.write('404页面不存在');} else {//否则文件读取成功res.writeHead(200, {'Content-Type': 'text/html; charset=urf-8'});res.write(data); //写入文件};res.end();})}).listen(3000);
注意:
后端相关内容每进行更新一次要注意重新运行执行指令。
运行执行指令,
node http.js
检验
在浏览器中输入localhost:3000/index进入页面
点击登录和注册进行跳转页面,便为成功。
连接数据库
数据库的操作
建表CREATE DATABASE IF NOT EXISTS my_sql CHARACTER SET UTF8;USE my_sql;SET FOREIGN_KEY_CHECKS=0;DROP TABLE IF EXISTS `userinfo`;CREATE TABLE `userinfo` (`Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`UserName` varchar(64) NOT NULL COMMENT '用户名',`UserPass` varchar(64) NOT NULL COMMENT '用户密码',PRIMARY KEY (`Id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';
开始连接
在http.js中加入的相关连接代码var mysql = require('mysql');//引入mysql模块var mysql_user = {//编写数据库链接数据host: 'localhost', //地址user: 'root', //用户名password: '', //密码 database: 'my_sql' //要链接的数据库名字 就是开始创建的那个表的名字};var connection = mysql.createConnection(mysql_user); //建立数据库链接connection.connect(function(err) {//链接数据库if (err) {//链接错误执行console.log('[错误]' + err);connection.end();return;};console.log('链接成功'); //否则链接成功});
此时重新执行node htt.js指令,同上方显示链接成功便可。
修改http.js,查询数据库
http.createServer(function(req, res) {if (req.url == '/favicon.ico') {return;};var pathname = url.parse(req.url).pathname;var body = ''; //定义一个放post数据的变量req.on('data', function(chunk) {//接受post参数并赋值给bodybody = '';body += chunk;body = querystring.parse(body);});fs.readFile(pathname.substring(1) + '.html', function(err, data) {if (err) {res.writeHead(404, {'Content-Type': 'text/html; charset=utf-8'});res.write('404页面不存在');} else {res.writeHead(200, {'Content-Type': 'text/html; charset=urf-8'});if (body) {//如果body存在 说明进行了post请求switch (pathname) {//判断登录还是注册case '/login': //执行登录事件 并传入对应参数query.emit('login', body.username, body.password, connection);break;case '/regsiter': //执行注册事件 并传入对应参数query.emit('regsiter', body.username, body.password, connection);break;}};res.write(data);};res.end();})}).listen(3000);
登录事件
var Event = require('events').EventEmitter; //引入事件模块var query = new Event(); //创建事件对象//绑定login事件 传入 username password 链接数据库对象query.on('login', function(username, password, connection) {//编写sql查询语句;var find = 'SELECT * FROM userinfo WHERE UserName = ' + username;//执行sql语句connection.query(find, function(err, result) {if (err) {//链接失败 直接return;console.log('[错误]' + err);return;};if (result.length) {//如果查到了数据console.log('------------start----------------');var string = JSON.stringify(result);var json = JSON.parse(string)[0];console.log(string)if (json.UserPass == password) {console.log('密码校验正确');} else {console.log('密码校验错误');}console.log('--------------end-----------------');} else {console.log('账号不存在')}})})
若进行登录是数据库中存储的数据,则检验成功,黑窗口上面显示 若登录的数据为数据库中没有的数据,有账号不存在和密码错误等情况
注册事件
//定义注册事件 传入 username password 链接数据库对象query.on('regsiter', function(username, password, connection) {//编写查询语句var find = 'SELECT * FROM userinfo WHERE UserName = ' + username;//编写添加语句var insert = 'INSERT INTO userinfo (Id,UserName,UserPass) VALUES (0,?,?)';//执行sql语句connection.query(find, function(err, result) {if (err) {//链接失败 直接return;console.log('[错误]' + err);return;};if (result.length) {//如果数据库返回数据 说明账号已存在console.log('账号已存在');return;} else {//否则不存在 可以进行注册var inserInfo = [username, password]; //定义插入数据//执行插入数据语句connection.query(insert, inserInfo, function(err, result) {if (err) {//链接失败 直接return;console.log('[注册错误]' + err);return;};console.log('------------start----------------');console.log('注册成功');console.log(result);console.log('--------------end-----------------');});};});
输入数据库中没有的数据进行注册
注册完成,数据库表中将会出现新注册的数据,同时黑窗口上面显示
!
到此便实现了与数据库的连接。