运用的知识:http,fs,get,post

接口定义:
/user?act=reg$user=aaa&pass=bbb
后台返回格式:{"ok":false,"msg":"原因"}
/user?act=login$user=aaa&pass=bbb
后台返回格式:{"ok":true,"msg":"原因"}

前端访问:
对文件的访问:
http://localhost:8080/1.html
http://localhost:8080/ajax.js
http://localhost:8080/1.jpg

对接口的访问:
http://localhost:8080/user?act=reg$user=aaa&pass=bbb

服务器(后端代码):
const http = require("http");
const querystring = require("querystring");
const fs = require("fs");
const urlLib = require("url");

var users = {}; //定义用户json,比如{“blue”:“123456”,“zhangsan”:“666666”}

var server = http.createServer(function(req,res){
var str = "";
req.on("data",function(data){
str += str;
});
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':
//检查前端传过来的参数用户名是否已经有了
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();
} 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(8081);

前端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="ajax.js" ></script>
<script>
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:'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("通信错误")
}
});
}
}
</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>

Node简单服务器开发的更多相关文章

  1. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  2. Node安装及搭建简单服务器

    注:本文安装系统为mac,windows及其他系统下载对应安装包 ,mac下载后的安装包为apk文件,windows为msi文件. 安装 1.在网上下载node安装包,官方网站2.双击下载文件,按步骤 ...

  3. Node.js初探之实现能向前台返回东西的简单服务器

    nodejs nodejs文件就是一个简单的js文件. 在shell中运行 Step 1. 打开终端,进入这个js文件所在目#录 Step 2. 用 'node 文件名.js' 命令运行它即可. 用n ...

  4. 搭建一个简单的node.js服务器

    第一步:安装node.js.可以去官网:https://nodejs.org/en/进行下载. 查看是否成功,只需在控制台输入 node -v.出现版本号的话,就证明成功了. 第二步:编写node.j ...

  5. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  6. NodeJS版本EasyDarwin开源流媒体服务器开发心得

    title: Node版本EasyDarwin开发心得 date: 2018-03-27 22:46:15 tags: 年后着手Node版本EasyDarwin的开发工作,截止到今天2018年03月2 ...

  7. erlang 游戏服务器开发

    http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发  erlang大牛写的游戏服务器值得参考 介绍本文以 ...

  8. 从无到有实现搭建vue+ElementUI+less+ES6的开发环境并进行简单的开发的项目

    项目简介:该项目是基于日常计算宿舍水电煤气费的需求写的,旨在从无到有实现搭建vue+ElementUI+less+ES6的开发环境并进行简单的开发,使用webpack进行代码的编译.压缩和打包,并疏通 ...

  9. 全栈项目|小书架|服务器开发-NodeJS 项目分包

    唠嗑 参考的是慕课网七月老师的课程,七月的课质量真的挺高的,推荐一波.这次的小书架项目源码不会全部公开,因为用了七月老师课程的绝大部分代码.虽然代码不全,但是只要思路看得懂,代码实现就很简单了. 小书 ...

随机推荐

  1. 混搭下的C与C++内存操作

    源自最近遇到一个的问题,先介绍一下背景.项目中混用了C与C++编程范式,鉴于项目成员背景不一,每个模块的负责人可以自行2选1.同时为了提高效率,C范式的模块被允许使用STL库的部分容器(其实也就仅仅大 ...

  2. python学习(五) 条件、循环和其他语句

    第五章 条件.循环和其他语句 5.1 print和import的更多信息 5.1.1 使用逗号输出 >>> print('age',43,45)         // 可以用逗号隔开 ...

  3. Apache配置中ProxyPass与ProxyPassReverse及ProxyPassMatch的概述

    apache中的mod_proxy模块主要作用就是进行url的转发,即具有代理的功能.应用此功能,可以很方便的实现同tomcat等应用服务器的整合,甚者可以很方便的实现web集群的功能. 例如使用ap ...

  4. 使用K2时提示未能加载文件或程序集Microsoft.IdentityModel等

    转:http://www.cnblogs.com/dannyli/archive/2012/10/15/2724931.html K2安装成功后,打开workspace管理流程时报错如下图: 未能加载 ...

  5. IDE 文件查找快捷键被占

    快捷键 Ctrl+Shift+F 被搜狗输入法抢占了. 打开搜狗输入法里的快捷键设置,去掉,my ide is ok!

  6. Vulkan Tutorial 01 开发环境搭建之Windows

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 相信很多人在开始学习Vulkan开发的起始阶段都会在开发环境的配置上下一些功夫,那么 ...

  7. android 4.0.4系统下实现apk的静默安装和启动

    转 android 4.0.4系统下实现apk的静默安装和启动 分类: Android 2013-02-14 14:13 1762人阅读 评论(10) 收藏 举报 最近在android 4.0.4系统 ...

  8. Spring总结八:jdbcTemplate的简单使用

    简介: Srping毕竟是一站式框架,所以也有操作数据库的东西,那就是jdbcTemplate,介绍一下jdbcTemplate的简单使用. 除了要引入必要的包以外,还需要引入 spring-jdbc ...

  9. laravel策略类,实现当前登陆的用户是否具有删除,修改文章的权限

    策略类依赖月门脸类Auth 首先创建一个门脸类 make:auth 然后再创建一个策略  php artisan make:policy PostPolicy 定义Auth的登陆类,用的是哪个模型登陆 ...

  10. CSS 内容生成

    原文地址:http://www.zhangxinxu.com/wordpress/?p=739 一.哗啦哗啦的简介 zxx://这里“哗啦哗啦”的作用是为了渲染一种氛围.content属性早在CSS2 ...