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. asp.net Frameset框架集的嵌套使用

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Frame.aspx.cs& ...

  2. 好看的table样式

    收藏个好看的table样式 <style type="text/css">table.gridtable { font-family: verdana,arial,sa ...

  3. 用 go 写 WebAssembly入门

    Golang WebAssembly 入门 Golang 在1.11版本中引入了 WebAssembly 支持,意味着以后可以用 go编写可以在浏览器中运行的程序,当然这个肯定也是要受浏览器沙盒环境约 ...

  4. 索引+sql优化

    索引的概念: 索引是提高查询速度的一种手段.索引有很多种,以下是索引树的结构 要求查询出薪资大于5000的雇员信息,只要在树中找到5000的节点,直接查询该节点右边的数据即可,左边就不用管了,这样提高 ...

  5. “全栈2019”Java异常第二十一章:finally不被执行的情况

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  6. 工作中常用Linux命令

    建立软链接  ln -s      例:ln -s b a 解释:把文件夹a和文件夹b关联起来,访问文件夹a,实际访问的是问价夹b 删除软连接  rm -rf a  直接删掉a文件夹跟a和b的软连接. ...

  7. vue 中的computed和watch

    计算属性 通过计算得来的属性 computed:是一个计算属性,用来监听属性的变化 computed里面的方法调用的时候是不需要加() 另外里面的方法必须要有一个返回值   computed里面的方法 ...

  8. [javascript]——移动端 HTML5 图片上传预览和压缩

    在开发移动端web网页中,我们不可避免的会遇到文件上传的功能,但由于手机图片尺寸太大,上传时间过长导致用户体验太差,就需要在上传前对图片进行一定的压缩. 在代码之前,有必要先了解我们即将使用到的几个A ...

  9. Oracle数据库PL/SQL那点事情---修改过电脑的用户名

    在安装Oracle数据库的PL/SQL工具时候,电脑名称是重装系统后自动生成的用户名名称,作为程序员,有很强的强迫症,就想利用自己的英文名称作为自己电脑的名称,所以就修改了电脑的名称:结果PL/SQL ...

  10. Azure Powershell部署使用平台映像的托管Windows VM及相关问题说明

    1.脚本背景信息: a.使用平台镜像(Windows Server 2016 zh-cn)部署高性能托管磁盘虚拟机 b.虚拟机默认不开启Boot诊断 c.添加三块已经创建好的数据磁盘 d.添加已创建好 ...