由于本文只是实现其原理,所以没有使用数据库,只是在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方法实现注册登录原理的更多相关文章

  1. node.js 初学(二)—— 搭建注册/登录服务器

    node.js 初学(二)—— 搭建注册/登录服务器 理论上来说,代码实现在理论和实际上是一样的.但实际上来说,他们不是 做一个最简单的用户注册登录功能 1.接口定义: 注册:/user?act=re ...

  2. 使用Node.js原生API写一个web服务器

    Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...

  3. node.js 下依赖Express 实现post 4种方式提交参数

    上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ...

  4. Node.js 实战 & 最佳 Express 项目架构

    Node.js 实战 & 最佳 Express 项目架构 Express Koa refs https://github.com/xgqfrms/learn-node.js-by-practi ...

  5. 用Node.js原生代码实现静态服务器

    ---恢复内容开始--- 后端中服务器类型有两种 1. web服务器[ 静态服务器 ] - 举例: wamp里面www目录 - 目的是为了展示页面内容 - 前端: nginx 2. 应用级服务器[ a ...

  6. Node.js的框架-express

    Node.js的框架 express 是第三方的 express const express=require('express'); const app=express(); const PORT=3 ...

  7. node.js入门及express.js框架

    node.js介绍 javascript原本只是用来处理前端,Node使得javascript编写服务端程序成为可能.于是前端开发者也可以借此轻松进入后端开发领域.Node是基于Google的V8引擎 ...

  8. node.js上除了Express还有哪些好用的web开发框架

    老司机都有体会, 开发本身没有多难, 最纠结其实是最初的技术和框架选型, 本没有绝对的好坏之分, 可一旦选择了不适合于自己业务场景的框架, 将来木已成舟后开发和维护成本都很高, 等发现不合适的时候更换 ...

  9. Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室

    一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用 ...

随机推荐

  1. DH 密钥交换算法

    1.引言 CSDN搞什么短信验证,7年的账号居然登陆不了,真心抓狂,WTF!!!! DH,全称为"Diffie-Hellman",这是一种确保共享KEY安全穿越不安全网络的方法,换 ...

  2. Sublime text3插件安装方法

    一.安装sublime text3插件的方法: 1.Ctrl+~键,调出console,将下面代码复制到底部命令行,回车: import urllib.request,os; pf = 'Packag ...

  3. 【案例分享】SequoiaDB+Spark搭建医院临床知识库系统

    1.背景介绍 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(H ...

  4. H3CNE实验:H3C设备文件管理

    第1步:配置文件的管理操作 (1) save [ safely ]--在H3C设备上将当前配置保存到存储介质的根目录下. 快速保存方式:不带 safely 参数. 安全方式:带 safely 参数. ...

  5. 深度理解Node.js单线程模型

    Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这 ...

  6. MS SQL Server Management Studio中提示不允许保长度出现不允许保存更改。您所做的更改要求删除并重新创建以下表

    在SQL Server Management Studio中直接修改正在连接的表结构会出现改不了的情况,如下图 解决方法:工具-选项-设计器--阻止保存要求重新创建表的更改,去掉对勾--确定即可

  7. iOS内购(IAP)中的那些坑

    公司的公共库原来并没有这部分的代码,以前做内购是用两个比较有名的github上的第三方库.一个叫MKStoreKit,另一个叫IAPManager,我看了一下写的都很辣鸡,使用起来很不方便,而且写的还 ...

  8. 【WeX5学习】 后端服务之访问数据库表

    WeX5是跨段移动开发框架,将H5的标签封装成组件,实现可视化.组件化快速开发.实现一次开发,多端(iOS.安卓和微信)运行.WeX5的IDE基于Eclipse,提供了一个完全可视化.组件化.拖拽式开 ...

  9. SpringMVC原理及非注解配置详解

    1. Spring介绍 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单. 这些控制器 ...

  10. FreeRTOS源代码的编程标准与命名约定

    编程标准 (Coding Standard) FreeRTOS 源代码遵守 MISRA (Motor Industry Software Reliability Association) 规范. 与 ...