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

  理论上来说,代码实现在理论和实际上是一样的。但实际上来说,他们不是  


做一个最简单的用户注册登录功能

1、接口定义:

  注册:/user?act=reg&user=wjw&pass=123456

  返回:{"ok":false,"meg":"原因"}

  

  登录:/user?act=login&user=wjw&pass=123456

  返回:{"ok":true,"meg":"原因"}

目录结构

  

ajax.js 文件

/**
* Author:strive
* Date: 2016/1/13
*/
function json2url(json) {
var arr = [];
for (var name in json) {
arr.push(name + '=' + json[name]);
}
return arr.join('&');
} function ajax(json) {
json = json || {};
if (!json.url) return;
json.data = json.data || {};
json.type = json.type || 'get'; var timer = null; if (window.XMLHttpRequest) {
var oAjax = new XMLHttpRequest();
} else {
var oAjax = new ActiveXObject('Microsoft.XMLHTTP');
} switch (json.type) {
case 'get':
oAjax.open('GET', json.url + '?' + json2url(json.data), true);
oAjax.send();
break;
case 'post':
oAjax.open('POST', json.url, true);
oAjax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
oAjax.send(json2url(json.data));
break;
} oAjax.onreadystatechange = function () {
if (oAjax.readyState == 4) {
clearTimeout(timer);
if (oAjax.status >= 200 && oAjax.status < 300 || oAjax.status == 304) {
json.success && json.success(oAjax.responseText);
} else {
json.error && json.error(oAjax.status);
}
}
};
}

user.html 文件 

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>node.js 实现用户注册登录</title>
<script src="ajax.js" charset="UTF-8"></script>
<script type="text/javascript">
window.onload = function () {
var oTxtUser = document.getElementById('user');
var oTxtPass = document.getElementById('pass');
var oBtnReg = document.getElementById('reg_btn');
var oBtnLogin = document.getElementById('login_btn'); // 注册
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('通信错误!');
}
});
}; // 登录
oBtnLogin.onclick = function () {
ajax({
url: '/user',
data: {
act: 'login',
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('通信错误!');
}
});
}; };
</script>
</head> <body>
用户名:
<input type="text" id="user">
<br> 密 码:
<input type="password" id="pass">
<br>
<input type="button" id="reg_btn" value="注册">
<input type="button" id="login_btn" value="登录">
</body> </html>

 server.js 文件

const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const urlLib = require('url'); // 用于储存用户名密码 {"wjw":"123456","zhangsan":"456123"}
var users = {}; var server = http.createServer(function (req, res) {
// 解析数据
var str = '';
req.on('data', function (data) {
str += data;
});
req.on('end', function () {
var obj = urlLib.parse(req.url, true);
const url = obj.pathname;
const GET = obj.query;
const POST = querystring.parse(str); // 区分是访问接口还是访问文件。
if (url == '/user') { // 访问的接口
switch (GET.act) {
case 'reg': // 注册
// 1. 检查用户名是否已经存在
if (users[GET.user]) {
res.write('{"ok":false,"msg":"此用户已经存在"}')
} else {
// 2. 插入 users
users[GET.user] = GET.pass;
res.write('{"ok":true,"msg":"注册成功"}')
}
break;
case 'login': // 登录
if (users[GET.user] == null) {
// 1. 检查用户名是否存在
res.write('{"ok":false,"msg":"此用户不存在"}')
} else if (users[GET.user] != GET.pass) {
// 2. 检查用户密码
res.write('{"ok":false,"msg":"用户名或密码不正确"}');
} else {
res.write('{"ok":true,"msg":"登录成功"}')
} break;
default:
res.write('{"ok":false,"msg":"未知的act"}')
break;
}
res.end();
} else {
// 读取文件
var file_name = './www' + url;
fs.readFile(file_name, function (err, data) {
if (err) {
res.write('404');
} else {
res.write(data);
}
res.end();
});
} }); }).listen(8080);

  

  

  

node.js 初学(二)—— 搭建注册/登录服务器的更多相关文章

  1. node.js+mysql用户的注册登录验证

    下面代码实现的功能是:用node.js连接mysql实现用户的注册和登录,这里主要实现的是后端的验证代码,前端显示部分没具体写出. 整个程序的流程是这样的: 1.首先建立数据库reji,数据表user ...

  2. node.js 初学(一)—— http fs 服务器/文件/post get

    node.js 初学 —— http fs 服务器/文件/post get 这个世界,从来不会给失败者颁奖! 了解 node.js (开源) node.js 是用来做后台开发的,但是现在大部分前端人员 ...

  3. Node.js博客搭建

    Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...

  4. Linux虚拟机中 Node.js 开发环境搭建

    Node.js 开发环境搭建: 1.下载CentOS镜像文件和VMWare虚拟机程序; 2.安装VMWare——>添加虚拟机——>选择CentOS镜像文件即可默认安装带有桌面的Linux虚 ...

  5. 玩转Node.js(二)

    玩转Node.js(二) 先来回顾上次的内容,上一次我们使用介绍了Node.js并写了第一个服务器端的Hello World程序,在这个Hello World程序中,请求自带的http模块并将其赋给h ...

  6. node.js+mysql环境搭建

    https://www.jianshu.com/p/9b338095cbe8 node.js+mysql环境搭建 0x01 前言 随着html web技术的发展,和全栈式开发的需求,对于前端人员来讲, ...

  7. [转]用Node.js创建自签名的HTTPS服务器

    用Node.js创建自签名的HTTPS服务器 创建自己的CA机构 创建服务器端证书 创建客户端证书 将证书打包 创建自己的CA机构 为CA生成私钥 openssl genrsa -out ca-key ...

  8. Node.js初学

    Node.js 初学~ 其技术上最大的卖点是非阻塞的I/O和基于事件的异步处理机制. 后端没有什么深入研究,一直对其不是很了解. 透过一个例子看 非阻塞 与 通常的 阻塞 var text = rea ...

  9. 前端使用node.js的http-server开启一个本地服务器

    前端使用node.js的http-server开启一个本地服务器 在写前端页面中,经常会在浏览器运行HTML页面,从本地文件夹中直接打开的一般都是file协议,当代码中存在http或https的链接时 ...

随机推荐

  1. [pat]1007 Maximum Subsequence Sum

    经典最大连续子序列,dp[0]=a[0],状态转移dp[i]=max(dp[i-1]+a[i],a[i])找到最大的dp[i]. 难点在于记录起点,这里同样利用动态规划s[i],如果dp[i]选择的是 ...

  2. python call so

    作为一个老程序员,如果,python不能与c发生点儿关系,我都挺过意不去的啊 那么,就解决了这个强迫症吧,阿门! //pycall.c #include <stdio.h> #includ ...

  3. _proto_ 和prototype自己的理解

    对象(obj)并不具有prototype属性,只有函数(function)才有prototype属性 1.在JS里,万物皆对象. 方法(Function)是对象,方法的原型(Function.prot ...

  4. vue中把table导出表格excel

    1.首先下载2个js,我的百度网盘有 2.安装依赖 npm install -S file-saver xlsx(这里其实安装了2个依赖) npm install -D script-loader 3 ...

  5. 004-全局应用程序类Global.asax

    服务器对象:Request.Response.Server.Session.Application.Cookie //功能1:为服务器对象注册Start.End处理 protected void Ap ...

  6. HDU 1014 Uniform Generator(题解)

    Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  7. 关于CTeX的几个大坑

    https://blog.csdn.net/zjutczj/article/details/53463478 最近一直忙着写小论文,毕业设计中期答辩,没有更新博客,忙过这一阵我会把这段时间学习机器学习 ...

  8. MVC 翻頁的那些坑

    思绪良久,最后还是决定记录一下遇到的坑,毕竟被 ‘折磨’ 了三天,关于分页,这个话题,我一开始时拒绝的,因为真正接触项目的时候,才发现每个框架都会封装一套自己的分页,毕竟相同风格的项目是不常见的,而在 ...

  9. jack welch:“你们知道了,但是我们做到了”

    一.我们发现,只要我们敢于相信自己,敢于朝着那些看似不可能的目标不懈努力,最终会如愿以偿,个人的领袖形象也将因此而确立. 二.一个领导者必须要有魄力.对我来说,这就是一个人能否领导一项业务的分水岭. ...

  10. Python pyodbc安装

    1)下面这个链接找个适合自己python版本的文件下载下来 https://pypi.org/project/pyodbc/#files 2)放到scripts下面 3) 在scripts路径上输入c ...