结合GET(),POST()实现一个简单、完整的服务器
复习一下:
| 基础模块 | 作用 |
|---|---|
| fs | fs模块用于对系统文件及目录进行读写操作 |
| http | 创建服务器。e.g.http.createServer(); |
| queryString | 把url带的参数串转化为数组对象 |
| url | 直接解析URL中字符串,提炼出我们需要的结果。 |
提示:
querystring主要用来解析POST数据(如‘querystring.parse()’)
Url主要用来解析GET数据(比如‘url.parse()’)。
1.url.parse()方法回顾:
var url = require('url');
var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld"
console.log(url.parse(queryUrl)) ;
运行结果:
{
protocol: 'http:',
slashes: true,
auth: null,
host: 'localhost:8888',
port: '8888',
hostname: 'localhost',
hash: null,
search: '?name=bigbear&memo=helloworld',
query: 'name=bigbear&memo=helloworld',
pathname: '/bb',
path: '/bb?name=bigbear&memo=helloworld',
href: 'http://localhost:8888/bb?name=bigbear&memo=helloworld'
}
说明:
query: 查询字符串中的参数部分(问号后面部分字符串),或者使用 querystring.parse() 解析后返回的对象。
2.querystring.parse()方法回顾
QueryString" 模块用于实现URL参数字符串与参数对象的互相转换
在url.parse()基础上,把参数字符串编程jsonp对象格式:
例子:

思路:
一、首先,我们确定一下接口。
/user?act=reg&user=aaa&pass=123456
{"ok": false, "msg": "原因"} /user?act=login&user=aaa&pass=123456
{"ok": true, "msg": "原因"}
二、 文件位置:

三、服务器接受数据后,处理并返回data的思路
- 接口名为user。如果url中地址不指向user,就显示404,否则进入2;
- 用户是登录还是注册?
- 如果既不是注册也不是登录。就提示“未知action”;
4.“登录部分”接下去是如果密码正确,就提示“登录成功”,否则提示“密码不正确”;
如果是注册,检测账号是否存在,也进行相应的提示。
const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const urlLib = require('url');
var users = {}; //将注册信息保存在缓存中
var server = http.createServer(function (req, res) {
// 解析数据
var str = '';
req.on("data", function (data) {
str += data;
});
req.on("end", function () {
var obj = urlLib.parse(req.url, true);
var url = obj.pathname;
const GET = obj.query;
const POST = querystring.parse(url);
// 区分接口和文件读取
if (url == '/user') { //读取‘url’接口下的文件时
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]) {
if (user[GET.pass] === GET.pass) { //密码是否正确
res.write('{"ok":true,"msg":"登录成功!"}');
} else {
res.write('{"ok":flase,"msg":"密码不正确!"}');
}
} else { //用户名不存在
res.write('{"ok":false,"msg":"用户名不存在"}');
}
break;
default:
res.write('{"ok":false,"msg":"未知操作"}');
}
res.end();
} else { //读取别的文件
var file_name = './www' + url;
fs.readFile(file_name, function (err, data) {
if (data) {
res.write(data);
} else {
res.write("404");
}
res.end();
});
}
});
});
server.listen(8080);
user.html文件代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<!--引入jQuery文件-->
<script src="ajax.js" charset="utf-8"></script>
<!--我们需要的js代码-->
<script type="text/javascript">
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');
oBtnLogin.onclick = function () {
ajax({
url: '/user',
data: {
act: 'login',
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('通信错误');
}
});
};
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('通信错误');
}
});
};
};
</script>
</head>
<body>
用户:
<input type="text" id="user">
<br> 密码:
<input type="password" id="pass">
<br>
<input type="button" value="注册" id="reg_btn">
<input type="button" value="登录" id="login_btn">
</body>
</html>
执行以下server.js,然后在浏览器中打开user.html页面。值得注意的是跨域问题,


注意:我们应该在服务器上跑,而不是只打开本地静态页面!
接下来就正常玩耍吧……
结合GET(),POST()实现一个简单、完整的服务器的更多相关文章
- [置顶] 在Ubuntu下实现一个简单的Web服务器
要求: 实现一个简单的Web服务器,当服务器启动时要读取配置文件的路径.如果浏览器请求的文件是可执行的则称为CGI程序,服务器并不是将这个文件发给浏览器,而是在服务器端执行这个程序,将它的标准输出发给 ...
- 转:【专题十二】实现一个简单的FTP服务器
引言: 休息一个国庆节后好久没有更新文章了,主要是刚开始休息完心态还没有调整过来的, 现在差不多进入状态了, 所以继续和大家分享下网络编程的知识,在本专题中将和大家分享如何自己实现一个简单的FTP服务 ...
- 专题十二:实现一个简单的FTP服务器
引言: 在本专题中将和大家分享如何自己实现一个简单的FTP服务器.在我们平时的上网过程中,一般都是使用FTP的客户端来对商家提供的服务器进行访问(上传.下载文件),例如我们经常用到微软的SkyDriv ...
- 自己动手模拟开发一个简单的Web服务器
开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...
- 一个简单的web服务器
写在前面 新的一年了,新的开始,打算重新看一遍asp.net本质论这本书,再重新认识一下,查漏补缺,认认真真的过一遍. 一个简单的web服务器 首先需要引入命名空间: System.Net,关于网络编 ...
- Tomcat剖析(二):一个简单的Servlet服务器
Tomcat剖析(二):一个简单的Servlet服务器 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三) ...
- Tomcat剖析(一):一个简单的Web服务器
Tomcat剖析(一):一个简单的Web服务器 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三):连接器 ...
- 自己模拟的一个简单的web服务器
首先我为大家推荐一本书:How Tomcat Works.这本书讲的很详细的,虽然实际开发中我们并不会自己去写一个tomcat,但是对于了解Tomcat是如何工作的还是很有必要的. Servlet容器 ...
- java实现一个简单的Web服务器
注:本段内容来源于<JAVA 实现 简单的 HTTP服务器> 1. HTTP所有状态码 状态码 状态码英文名称 中文描述 100 Continue 继续.客户端应继续其请求 101 Swi ...
- 响应式编程笔记三:一个简单的HTTP服务器
# 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习. 我们会看到Reactive是一个有用的抽象 - 对 ...
随机推荐
- php用PHPExcel库生成Excel文档的例子
<?php require_once '../libs/PHPWord/PHPWord.php'; require_once '../libs/PHPWord/PHPWord/IOFactory ...
- 关于python中的pickle函数
8-7参考阅读 - 读文件.写文件.异常处理.文件保存游戏.pickle数据转成文本的过程又被称为"序列化",即将对象状态转换为可保持或传输的格式的过程.对应的,从序列化的格式中解 ...
- ESLint可共享配置发布,团队自定义ESLint规则新鲜出炉
ESLint于2013年6月份推出,至今4个年头,最新版本v4.8.0.它是目前主流的用于Javascript和JSX代码规范检查的利器,很多大公司比如Airbnb和Google均有一套自己的Java ...
- 【转】Python中实现远程调用(RPC、RMI)简单例子
远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了.远程调用是分布式系统的基础. 远程调用一般分为两种,远程过程调用(RPC)和远程 ...
- C# Async/await 异步多线程编程
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- Linux Redis集群搭建与集群客户端实现(Python)
硬件环境 本文适用的硬件环境如下 Linux版本:CentOS release 6.7 (Final) Redis版本: Redis已经成功安装,安装路径为/home/idata/yangfan/lo ...
- UWP 分享用那个图标
有两个图标,如果让你选,你会用哪个图标做分享图标? 这就算有意义的图标和通用图标的选择. 可以看到 左边的图标比较有意义,但是右边的图标是通用的. 是需要选有意义的?还是通用的 在 UWP ,选的是第 ...
- win10 uwp 获得缩略图
有时候需要获得文件或视频的缩略图. 本文提供两个方法,用于获得文件的缩略图和截取视频指定时间的显示图片. 文件缩略图 如果有一个文件需要获得缩略图,可以使用 GetThumbnailAsync 或 G ...
- win10 uwp 右击浮出窗在点击位置
本文主要让MenuFlyout出现在我们右击位置. 我们一般使用的MenuFlyout写在前台,写在Button里面,但是可能我们的MenuFlyout显示的位置和我们想要的不一样. 通过使用后台写S ...
- .NET下发送邮件遇到问题及解决方案
.NET后台代码利用QQ邮箱服务器发送邮件遇到的问题: "mail from address must be same as authorization user" 首先,看下我的 ...