1.定接口
     /user 接口
              输入    act=reg&user=aaa&pass=123456
              输出     {"ok":false, "msg":"原因"}
     
              输入     act=login&user=aaa&pass=123456
              输出     {"ok": true, "msg":"原因"}
 
2、server.js
     
解析数据
读取文件
 
访问的情况 --- 区分接口和文件
     1.对文件的访问
 
     2.对接口的访问
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>node登录注册</title>
<script src="jquery.js"></script>
</head>
<body>
<div>
账号:<input type="text" name="name" id="user">
</div>
<div>
密码:<input type="password" name="pass" id="password">
</div>
<input type="button" value="注册" id="reg">
<input type="button" value="登录" id="login">
</body>
<script>
$('#reg').click(function() {
console.log($('#user').val(), $('#password').val())
$.ajax({
url: '/user',
data: {act: 'reg', user: $('#user').val(), pass: $('#password').val()},
type: 'get',
success(res) {
let data = eval('('+ res +')');
if(data.ok) {
alert('注册成功');
}else {
alert('注册成功' + data.msg);
}
},
error() {
alert('通信错误');
}
})
}); $('#login').click(function() {
$.ajax({
url: 'user',
data: {act: 'login', user: $('#user').val(), pass: $('#password').val()},
type: 'get',
success(res) {
let data = eval('('+ res +')');
if(data.ok) {
alert('登录成功');
}else {
alert('登录失败' + data.msg);
}
},
error() {
alert('通信错误');
}
});
});
</script>
</html>
const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const urlLib = require('url'); // {"jason": "123456", "liming": "000000", "xiaokui": "654321"}
let users = {}; let server = http.createServer( (req, res) => {
// 解析数据
let str = '';
req.on('data', (data) => {
str += data;
});
req.on('end', () => {
let urlObj = urlLib.parse(req.url, true); const url = urlObj.pathname;
const GET = urlObj.query;
const POST = querystring.parse(str); // 区分-接口和文件
if(url == '/user') { // 接口 --处理接口
switch(GET.act) {
// 注册
case 'reg':
// 检查是否已经注册
if(users[GET.user]) {
res.write('{"ok": false, "msg": "此用户名已经存在"}');
}else {
// 插入到 users
users[GET.user] = GET.pass;
res.write('{"ok": true, "msg": "注册成功"}');
}
break;
// 登录
case 'login':
// 检查用户是否存在
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": "未知的act"}');
}
res.end();
console.log(GET, users);
}else { // 文件 -- 读取文件
let file_name = './www' + url;
fs.readFile(file_name, (err, data) => {
if(err) {
res.write('');
}else {
res.write(data);
}
res.end();
});
}
});
}); server.listen();

nodejs学习笔记三(用户注册、登录)的更多相关文章

  1. nodejs学习笔记<三>关于路由(url)

    在网站开发中,路由的设置非常关键.nodejs对路由处理封装了一个比较全面的模块. 来认识下url模块 1)在命令行(cmd)可以直接 node —> url 可直接查看url模块的所有方法. ...

  2. nodejs学习笔记三——nodejs使用富文本插件ueditor

    在做自己的nodejs项目的时候遇到需要使用ueditor.原来下载的是ueditor的jsp版本.目录如下  在ueditor.config.js中有配置服务器home路径(这个home路径能找到u ...

  3. NodeJS学习笔记三

    map map对象是一个简单的键/值映射.任何值(包括对象和原始值)都可以用作一个键或一个值. var m = new Map(); var o = {p: "Hello World&quo ...

  4. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

  5. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  6. Nodejs学习笔记(十六)--- Pomelo介绍&入门

    目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...

  7. Nodejs学习笔记(十六)—Pomelo介绍&入门

    前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...

  8. Nodejs学习笔记(四)——支持Mongodb

    前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...

  9. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

随机推荐

  1. c#进阶之lambda表达式

    阅读之前,先确保对委托有基本的了解,传送门 c#进阶之浅析委托和事件. lambda表达式雏形第一步 在委托那篇文章,绑定的的方法都是具名函数,为了简化书写,可以换成匿名函数 public deleg ...

  2. Android Performance 性能提升

    1. 经常变动的字符串要用 StringBuilder,然后每次变动用 append 方法.而不应该每次创建新的 String. 2. 使用 static final 变量. 3. It's reas ...

  3. python网络编程--粘包解决方案 和 subprocess模块

    1.缓冲区:作用:将程序和网络解耦分为输入缓冲区, 输出缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区.write()/send() 并不立即向网络中传输数据,而是先 ...

  4. [bzoj4712]洪水 线段树+树链剖分维护动态dp+二分

    Description 小A走到一个山脚下,准备给自己造一个小屋.这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到山顶放了格水.于是小A面前出现了一个瀑布.作为平民的小A只好老实巴交地爬 ...

  5. PHP中php_sapi_name()与array_map()

    1,php_sapi_name() php_sapi_name返回web服务器和php之间的接口类型.函数说明: string php_sapi_name(void) 返回描述php所使用的接口类型的 ...

  6. 0基础浅谈反射型xss(2)

    0x1:回顾前文疑惑“先闭合,在构造” 上一篇,我们说到了xss的一个触发精髓,“先闭合,在构造”,对于前面的先闭合,我们来简单的解释一下:   首先说,为什么要闭合? 因为HTML标签都是成对出现的 ...

  7. linux查看python安装位置

    1, import sys print sys.path 即可打印所有python路径.   2, 执行命令whereis python即可显示出python相关的所有的路径,包括可执行文件路径,安装 ...

  8. SQL面试题(网络收集)

    1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name   kecheng   fenshu 张三     语文       81 张三     数学       75 李四     ...

  9. jscover使用说明-总体说明

    1.总体说明 这个文档现在是完善和准确的,不管怎样,尽量去参考JSCoverage documentation. 1.1.介绍 JSCove是一个用来显示JavaScript项目代码覆盖率的工具,它是 ...

  10. Dota2APP--第一天

    从今天开始,下定决心自己独立开发一个有关于Dota2的APP,因为非常喜欢这个游戏恰好自己又是做iOS移动开发的所以萌生了这个想法.希望可以坚持下去,有喜欢dota2的朋友也可以提点建议. 一.项目的 ...