Node简单服务器开发
运用的知识: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简单服务器开发的更多相关文章
- 深入浅出node.js游戏服务器开发1——基础架构与框架介绍
2013年04月19日 14:09:37 MJiao 阅读数:4614 深入浅出node.js游戏服务器开发1——基础架构与框架介绍 游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...
- Node安装及搭建简单服务器
注:本文安装系统为mac,windows及其他系统下载对应安装包 ,mac下载后的安装包为apk文件,windows为msi文件. 安装 1.在网上下载node安装包,官方网站2.双击下载文件,按步骤 ...
- Node.js初探之实现能向前台返回东西的简单服务器
nodejs nodejs文件就是一个简单的js文件. 在shell中运行 Step 1. 打开终端,进入这个js文件所在目#录 Step 2. 用 'node 文件名.js' 命令运行它即可. 用n ...
- 搭建一个简单的node.js服务器
第一步:安装node.js.可以去官网:https://nodejs.org/en/进行下载. 查看是否成功,只需在控制台输入 node -v.出现版本号的话,就证明成功了. 第二步:编写node.j ...
- node.js之开发环境搭建
一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...
- NodeJS版本EasyDarwin开源流媒体服务器开发心得
title: Node版本EasyDarwin开发心得 date: 2018-03-27 22:46:15 tags: 年后着手Node版本EasyDarwin的开发工作,截止到今天2018年03月2 ...
- erlang 游戏服务器开发
http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发 erlang大牛写的游戏服务器值得参考 介绍本文以 ...
- 从无到有实现搭建vue+ElementUI+less+ES6的开发环境并进行简单的开发的项目
项目简介:该项目是基于日常计算宿舍水电煤气费的需求写的,旨在从无到有实现搭建vue+ElementUI+less+ES6的开发环境并进行简单的开发,使用webpack进行代码的编译.压缩和打包,并疏通 ...
- 全栈项目|小书架|服务器开发-NodeJS 项目分包
唠嗑 参考的是慕课网七月老师的课程,七月的课质量真的挺高的,推荐一波.这次的小书架项目源码不会全部公开,因为用了七月老师课程的绝大部分代码.虽然代码不全,但是只要思路看得懂,代码实现就很简单了. 小书 ...
随机推荐
- 1088 Rational Arithmetic
题意: 给出两个分式(a1/b1 a2/b2),分子.分母的范围为int型,且确保分母不为0.计算两个分数的加减乘除,结果化为最简的形式,即"k a/b",其中若除数为0的话,输出 ...
- mysql跟踪执行的sql语句
修改my.cnf配置文件 /usr/local/mysql/bin/mysql --verbose --help | grep -A 1 'Default options' Default optio ...
- python---Redis 学习笔记
缓存 前言: 大家都听过缓存,缓存是干啥的呢?我们可以和json和pickle来说,两个程序之间实现信息交互,可以通过在A程序中把数据改成json ,然后传给B程序,通过文件这个介质.文件这个效率很低 ...
- Oracle11gr2_ADG管理之switchover实战
. 环境 db_primary db_stanby 备注 db版本 11.2.0.4.0 11.2.0.4.0 os版本 centos 6.4 centos 6.4 db_unique_name ne ...
- Shell脚本 判断
#Linux系统Shell脚本判断变量文件目录:权限.是否存在.空值.相等 1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真str1 != str2 当串str1和str2不等时 ...
- 构造IOCTL命令的学习心得-----_IO,…
在编写ioctl代码之前,需要选择对应不同命令的编号.为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 2_Linear regression with one variable 单变量线性回归
Lecture2 Linear regression with one variable 单变量线性回归 2.1 模型表示 Model Representation 2.1.1 线性回归 Li ...
- shelve和hashlib模块
一.shelve模块 shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式. 注意: shelve模块封装了pickle模块,,允许 ...
- MobileSubstrate
[MobileSubstrate] Cydia Substrate (formerly called MobileSubstrate) is the de facto framework that a ...
- 刷题向》关于搜索+tarjan的奇怪组合题 BZOJ1194 (normal+)
关于这道题,其实看懂了的话还是比较好写的,只是题目实在又臭又长,没有让人读下去的勇气. 给出题目翻译: 给你S张图, 每张图有M个点,其中M个点中有N个是特殊单位,会给出. 每个点又有0.1两条边指向 ...