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. Session如何保存在sql数据库中

    aspnet中,session默认以inproc模式存储,也就是保存在iis进程中,这样有个优点就是效率高,但不利于为本负载均衡扩展.可以把session信息保存在SQL Server中,据说,该种方 ...

  2. MSSQL中通过关键字查找所有存储过程

    select b.namefrom 数据库名.dbo.syscomments a, 数据库名.dbo.sysobjects bwhere a.id=b.id and b.xtype='p' and a ...

  3. vue + echarts画圈圈

    <div class="chart-bar-left" id= "chartbar-left" style="margin-top:1%;&qu ...

  4. .net后台转json数据

    List<PostInfo> list = new List<PostInfo>();PostInfo postinfo = new PostInfo();list.Add(p ...

  5. 初步理解IOC和DI和AOP模式

    初步理解IOC和DI和AOP模式 控制反转(IOC) 控制反转(IOC,Inversion of Control)是一种转主动为被动关系的一种编程模式,有点类似于工厂模式,举个栗子, 下面这个这不是I ...

  6. [C#学习笔记]C#中的decimal类型——《CLR via C#》

    System.Decimal是非常特殊的类型.在CLR中,Decimal类型不是基元类型.这就意味着CLR没有知道如何处理Decimal的IL指令. 在文档中查看Decimal类型,可以看到它提供了一 ...

  7. Let it crash philosophy part II

    Designing fault tolerant systems is extremely difficult.  You can try to anticipate and reason about ...

  8. 大公司怎么做Android代码混淆的?

    3月17日,网易资深安全工程师钟亚平在安卓巴士全球开发者论坛上做了<安卓APP逆向与保护>的演讲.其中就谈到了关于代码混淆的问题.现摘取部分重点介绍如下:   Java代码是非常容易反编译 ...

  9. FusionCharts的使用方法 - 公司所用的flash式的图像统计工具

    我们公司一直用这个图表统计, 最近整理了一下相关文档,提供大家学习. 首先可以看看 http://www.cnblogs.com/xuhongfei/archive/2013/04/12/301688 ...

  10. Spring中 使用注解+c3p0+事物 《模拟银行转账》

    使用注解的方式  模拟转账 要么都成功 要么都失败 !保持一致性! 准备工作: jar包:  需要的类:       UserDao: package com.hxzy.spring.c3p0.Dao ...