由于本文只是实现其原理,所以没有使用数据库,只是在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. Linux下如何启动svn服务器

    service svnserve start 启动服务 service svnserve stop 停止服务 service svnserve restart 重启服务 rpm -e --nodeps ...

  2. MySQL访问控制实现原理

    MySQL访问控制实现原理 MySQL 访问控制实际上由两个功能模块共同组成,从第一篇的第二章架构组成中可以看到,一个是负责 “看守 MySQL 大门”的用户管理模块,另一个就是负责监控来访者每一个动 ...

  3. 【LeetCode】67. Add Binary

    题目: Given two binary strings, return their sum (also a binary string). For example,a = "11" ...

  4. js模拟jq获取id

    js模拟jq获取id: (jquery)需要自己添加 <!DOCTYPE html> <html lang="en"> <head> <m ...

  5. Gist - ES6 Promise

    The concept of "Promise" Promise is used to asynchronous computations. Introduction " ...

  6. 最新的极光推送服务器端代码(java服务器后台向手机端自定义推送消息)

    一共两个类 一个Jdpush  一个JpushClientUtil 代码如下   注解都写的很清楚 package com.sm.common.ajpush; import org.slf4j.Log ...

  7. 接水问题【NOIP2010普及组】优先队列

    题目描述 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1. 现在有 n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接水顺序从 1到 n ...

  8. (转载)Sybase:bcp命令参考

    参考文档: http://blog.csdn.net/wwp1026/article/details/6900569

  9. linux 常用 掌握要点

    1.查看正在执行的进程(Process) ps命令 Process Status 进程状态 语法: ps  [option]  [--help] -A  列出所有的行程 -w  显示加宽可以显示较多的 ...

  10. JavaWeb 后端 <七> 之 mvc3层架构