Node.js原生及Express方法实现注册登录原理
由于本文只是实现其原理,所以没有使用数据库,只是在js里面模拟数据库,当然实际中还是需要用数据库的。
1.node.js原生方法
①html页面,非常简单,没有一丝美化~我们叫它user.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>user</title>
</head>
<body>
用户:<input type="text" id="user"><br>
密码:<input type="password" id="pass"><br>
<input type="button" value="注册" id="reg_btn">
<input type="button" value="登录" id="login_btn">
</body>
</html>
②然后,我们来写node服务器,关键的点我都注释出来了,起个名字叫server.js吧
const http = require('http'); //node原生模块,用来创建服务器
const fs = require('fs'); //node原生模块,用于文件操作
const urlLib = require('url'); //node原生模块,用于解析URL地址
const querystring = require('querystring');//node原生模块,用于解析POST数据
var users = {};//{"user":"pass"} 模拟数据库船建一个JSON对象,用于存储用户信息
var server = http.createServer(function (req, res) { //创建服务器
var str = ''; //创建空字符串用来保存接收到的POST数据
req.on('data',function (data) {
str += data; //此处需注意,如果客户端传过来的数据非常大,它会分多次接收
});
req.on('end',function () { //当数据传输结束,会执行'end'(只执行一次)
var obj = urlLib.parse(req.url,true); //解析URL地址
const url = obj.pathname; //获得接口地址
const GET = obj.query; //获得GET数据
const POST = querystring.parse(str); //解析POST数据
if (url == '/user'){ //读取接口
switch (GET.act){
case 'reg':
//1.用户名是否存在
if (users[GET.user]){
res.write('{"ok":false,"msg":"此用户已存在!"}')
}else {
//2.插入新注册用户
users[GET.user] = GET.pass;
res.write('{"ok":true,"msg":"注册成功!"}')
};
break;
case 'login':
//1.用户名是否存在
if (users[GET.user] == null){
res.write('{"ok":false,"msg":"此用户不存在!"}')
}else if(users[GET.user] != GET.pass){
res.write('{"ok":false,"msg":"用户名或密码错误!"}')
}else {
res.write('{"ok":true,"msg":"登陆成功!"}')
};
break;
default:
res.write('{"ok":false,"msg":"未知操作!"}')
};
res.end();
}else { //读取文件
var fileName = './www' + url; //静态文件存放地址(www是目录)
fs.readFile(fileName,function (err,data) {
if (err){
res.write('404');
}else {
res.write(data)
};
res.end()
});
};
});
});
server.listen(8081); //监听端口
③服务器写好了,我们来写触发事件(我用的封装过的Ajax.js,大家用jQuery也是可以的,稍微改一下即可)
var oTxtUser=document.getElementById('user');
var oTxtPass=document.getElementById('pass');
var oBtnReg=document.getElementById('reg_btn');
var oBtnLogin=document.getElementById('login_btn');
oBtnLogin.onclick=function (){
ajax({
url: '/user',
data: {act: 'login', user: oTxtUser.value, pass: oTxtPass.value},
type: 'get',
success: function (str){
var json=eval('('+str+')');
console.log(json);
if(json.ok){
alert('登录成功');
}else{
alert('登录失败:'+json.msg);
}
},
error: function (){
alert('通信错误');
}
});
};
oBtnReg.onclick=function (){
ajax({
url: '/user',
data: {act: 'reg', user: oTxtUser.value, pass: oTxtPass.value},
type: 'get',
success: function (str){
var json=eval('('+str+')');
if(json.ok){
alert('注册成功');
}else{
alert('注册失败:'+json.msg);
}
},
error: function (){
alert('通信错误');
}
});
};
至此,我们的简单注册登录就完成了,启动一下server.js,然后即可操作。

2.Express方法
整体思路跟原生的差不多,只是多了一些中间件和方法。html和js触发事件跟前面基本一样,这里我们直接来写Express服务器。
①使用Express需要先下载express框架,后面需要什么我们就下载什么(express-static是我们后面需要用到的中间件)
node install express express-static
②直接来写登陆服务器login.js
const express=require('express'); //引入Express框架
const expressStatic=require('express-static'); //用来给静态文件设置目录
var server=express(); //创建Express服务器
server.listen(8081); //监听服务器
var users={ //模拟数据库,制造假的用户注册信息
"zhangsan":"123",
"lisi":"456",
"wangwu":"789"
};
server.get('/login',function (req,res) {
console.log(req.query)
var user = req.query["user"];
var pass = req.query["pass"];
if (users[user]==null){
res.send({ok:false,msg:'此用户不存在!'});
}else {
if(users[user]!=pass){
res.send({ok:false,msg:'密码错误!'});
}else {
res.send({ok:true,msg:'成功!'});
}
};
});
server.use(expressStatic('./www')); //设置静态文件目录
启动一下login.js,然后即可操作。
这两种方法都是最基础的原理,如果在实际工作中还需要考虑很多东西,共勉!
Node.js原生及Express方法实现注册登录原理的更多相关文章
- node.js 初学(二)—— 搭建注册/登录服务器
node.js 初学(二)—— 搭建注册/登录服务器 理论上来说,代码实现在理论和实际上是一样的.但实际上来说,他们不是 做一个最简单的用户注册登录功能 1.接口定义: 注册:/user?act=re ...
- 使用Node.js原生API写一个web服务器
Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...
- node.js 下依赖Express 实现post 4种方式提交参数
上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ...
- Node.js 实战 & 最佳 Express 项目架构
Node.js 实战 & 最佳 Express 项目架构 Express Koa refs https://github.com/xgqfrms/learn-node.js-by-practi ...
- 用Node.js原生代码实现静态服务器
---恢复内容开始--- 后端中服务器类型有两种 1. web服务器[ 静态服务器 ] - 举例: wamp里面www目录 - 目的是为了展示页面内容 - 前端: nginx 2. 应用级服务器[ a ...
- Node.js的框架-express
Node.js的框架 express 是第三方的 express const express=require('express'); const app=express(); const PORT=3 ...
- node.js入门及express.js框架
node.js介绍 javascript原本只是用来处理前端,Node使得javascript编写服务端程序成为可能.于是前端开发者也可以借此轻松进入后端开发领域.Node是基于Google的V8引擎 ...
- node.js上除了Express还有哪些好用的web开发框架
老司机都有体会, 开发本身没有多难, 最纠结其实是最初的技术和框架选型, 本没有绝对的好坏之分, 可一旦选择了不适合于自己业务场景的框架, 将来木已成舟后开发和维护成本都很高, 等发现不合适的时候更换 ...
- Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室
一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用 ...
随机推荐
- DataTable多线程操作报错情况
最近在写一个http接口时用了DataTable这个强大的利器,接口用浏览器跑起来没任何问题.当时也没考虑并发问题,后来用一个压力测试工具做大并发测试,1000+/s次速度测试.发现程序报错了.程序报 ...
- PHP数组按引用传递
<?php /**PHP数组按引用传递**/ $arr = array( array('id' => 1, 'name' => 'name1'), array('id' => ...
- 7.modifier插件的自定义和使用
1.在plugins下面创建一个文件 modifier.changeDate.php 编写: <?php function smarty_modifier_changeDate($utime,$ ...
- 如何使用LIBSVM,从安装到基本实例使用
1.在eclipse上安装libsvm 下载libsvm压缩包解压到本地目录,下载地址http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html 如图: 2 ...
- Vim按Esc后光标左移问题的解决
参考了这篇文章http://vim.wikia.com/wiki/Prevent_escape_from_moving_the_cursor_one_character_to_the_left 在Vi ...
- Mongodb 参数说明及常见错误处理
在 CentOS7 上安装 MongoDB 1 通过 SecureCRT 连接至 CentOS7 服务器: 2 进入到 /usr/local/ 目录:cd /usr/local 3 在当前目录下 ...
- Linux之通配符
前言:学习通配符有点为正则表达式打基础的感觉……之前学python有学过正则表达式,所以这篇博客学起来还是挺快的. 特殊符号 | #管道符,或者(正则) > #输出重定向 >> #输 ...
- JavaSE中Collection集合框架学习笔记(1)——具有索引的List
前言:因为最近要重新找工作,Collection(集合)是面试中出现频率非常高的基础考察点,所以好好恶补了一番. 复习过程中深感之前的学习不系统,而且不能再像刚毕业那样死背面试题,例如:String是 ...
- JVM总结之GC
哪些内存需要回收 在Java堆中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要知道哪些对象还"存活着",哪些对象已经"死去". 引用计数 ...
- Python 迭代器和列表解析
Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...