由于本文只是实现其原理,所以没有使用数据库,只是在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. JAVA容器结构图

  2. 执行3小时超长SQL的分析优化过程:从索引遇见IS NULL,到最佳实践

    月底高峰期,对一个典型项目抽查分析时,发现了一个超级慢.全表扫描的SQL,语句很简单,AWR中赫然在列,在我统计的截止时间内还没有结束... 使用v$active_session_history进一步 ...

  3. Linux内核互斥锁--mutex

    一.定义: /linux/include/linux/mutex.h   二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实现的,但这对于内核用户是不可见 ...

  4. dbgrid数据显示和数据源不同

    dbgrid数据显示和数据源不同,在ODBC配置时如下设置,去掉勾

  5. 一颗简单的JDBC栗子

    前言:安装好数据库之后,我们编写的java程序是不能直接使用数据库的,而JDBC(Java Database Connectivity,即java数据库连接)是java语言里用来规范客户端程序访问数据 ...

  6. 扩展SQLite使其能从apk文件中读取db

    游戏中会大量使用到配置文件,每个项目组根据自己不同的需求会选择不同的存储格式,比如使用Json或者SQLite来存储数据.此处我们只对使用SQLite的情况来做讨论.一般情况下会选择把它放在可读写目录 ...

  7. 智联卓聘 卓聘IM(聊聊)开发实践

    1.  卓聘IM开发背景 智联卓聘是智联旗下高端人才招聘平台,成立快4年多,业务增涨每年以100%速度增涨快,同时对产品和研发速度都比较高. 2015年提出IM开发,主要用于后选人与猎头及时交流,降低 ...

  8. Async(异步)(一)

    在谈到异步的概念时,先要了解几个概念了. 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的 什么是线程? 线程 ...

  9. Android - Daydream 互动屏保

    Android Daydream 互动屏保 API19 API23 Create:2016-03-01 继承DreamService来实现一个自定义屏保 Dreams是当充电的设备空闲,或者插入底座时 ...

  10. Android5.1 - 通讯录建立群组

    [问题] 在没有账户的时候,不应该有添加联系人群组的选项. 我们要把这个选项干掉. [相关log]06-23 17:25:00.804: E/GroupEditorFragment(6030): No ...