第七课 nodejs请求响应
1 server.js 接收请求接收请求参数 和接收完成需要对request增加两个监听事件
var http = require('http');
var url = require('url');
function start(route,handler)
{
function onRequest(request,res)
{
var postData ="";
var pathName = url.parse(request.url).pathname;
request.setEncoding("utf8");
request.addListener("data",function(postDataChunk)
{
//接收的参数累加 因为nodejs接收参数到达一定的大小会分片发过来
postData += postDataChunk;
console.log("Received POST data chunk '"+
postDataChunk +"'.");
});
request.addListener("end",function()
{
//得到全部参数后 发给路由
route(pathName,handler, res, postData);
});
}
http.createServer(onRequest).listen(5000);
console.log('Server Started');
}
exports.start = start;
2 route.js
function route(pathName,handler,res,postData)
{
console.log('router user request url:'+pathName+'\n');
if(typeof handler[pathName]==='function')
{
return handler[pathName](res,postData);
}else{
console.log('No request handler found for '+pathName);
return '404';
}
}
exports.route = route;
3 requestHandler.js
var querystring = require('querystring');
//使用 response直接输出 就不会阻塞其他请求
function start(response,postData){
console.log("Request handler 'start' was called.");
var body ='<html>'+
'<head>'+
'<meta http-equiv="Content-Type" content="text/html; '+
'charset=UTF-8" />'+
'</head>'+
'<body>'+
'<form action="/upload" method="post">'+
'<textarea name="text" rows="20" cols="60"></textarea>'+
'<input type="submit" value="Submit text" />'+
'</form>'+
'</body>'+
'</html>';
response.writeHead(200,{"Content-Type":"text/html"});
response.write(body);
response.end();
}
function upload(response,postData){
console.log("Request handler 'upload' was called.");
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("You've sent: "+ postData);//有特殊的编码
response.write('querystring:'+querystring.parse(postData).text);//自动解析为中文
response.end();
}
exports.start = start;
exports.upload = upload;
4 index.js
var server = require('./server');
var route = require('./route');
var requestHandlers = require('./requestHandlers');
var handle ={}
handle["/"]= requestHandlers.start;
handle["/start"]= requestHandlers.start;
handle["/upload"]= requestHandlers.upload;
server.start(route.route,handle);
//注意输出的结果
response.write("You've sent: "+ postData);//有特殊的编码
response.write('querystring:'+querystring.parse(postData).text);//自动解析为中文
第七课 nodejs请求响应的更多相关文章
- TCP/IP协议,,OSI的七层参考模型,HTTP请求响应机制
一.TCP/IP协议 TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是In ...
- HTTP协议请求响应过程和HTTPS工作原理
HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...
- HTTP请求响应过程 与HTTPS区别
原文:HTTP请求响应过程 与HTTPS区别 HTTP协议学习笔记,基础,干货 HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏 ...
- Asp.Net请求响应过程
Asp.Net请求响应过程 在之前,我们写了自己的Asp.Net框架,对整个流程有了一个大概的认识.这次我们来看一下Asp.Net整个请求处理过程是怎么样的. 浏览器封装请求报文,发送请求到达服务器, ...
- [译]Quartz.NET 框架 教程(中文版)2.2.x 之第七课 触发监听器和作业任务监听器
第七课:触发监听器和作业任务监听器 监听器是在调度器中基于事件机制执行操作的对象.你大概可以猜到,触发监听器接收响应跟触发器有关的事件,作业任务监听器接收响应跟作业任务有关的事件. 跟触发器有关的事件 ...
- 第一篇 Flask基础篇之(配置文件,路由系统,模板,请求响应,session&cookie)
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- Flask框架(二)—— 反向解析、配置信息、路由系统、模板、请求响应、闪现、session
Flask框架(二)—— 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 目录 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 一.反向解析 1.什么是反向解析 ...
- HTTP请求响应过程以及与HTTPS区别
HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...
- 一比一还原axios源码(二)—— 请求响应处理
上一章,我们开发了一些简单的代码,这部分代码最最核心的一个方法就是buildURL,应对了把对象处理成query参数的方方面面.虽然我们现在可以发起简单的请求了,但是第一,我们无法接收到服务器的响应, ...
随机推荐
- Openerp图片路径处理
Openerp目前存储图片如人力资源头像图片等都是以二进制的方式存储在数据库中,若要修改数据库里只存储路径可以用这种方法 Image 装饰器: Image装饰器包含3中图片显示 Image 大图片 i ...
- duplicate symbols 错误解决方案
duplicate symbols for architecture arm64 after xCode 8.0 update 升级xcode 8以后提示有的变量重复了,只要在 Build setti ...
- eclipse git拉取完代码后怎么maven构建
这个参考下:https://jingyan.baidu.com/article/414eccf64d29bc6b431f0ade.html 没试过上面的,反正git后的文件夹非空,用maven创建会失 ...
- Android JNI和NDK学习(06)--JNI的数据类型(转)
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3094037.html 本文介绍JNI的数据类型.NDK中关于JNI数据类型的 ...
- Servlet3.0: 简介AsyncContext
每个请求来到Web容器,Web容器会为其分配一条执行绪来专门负责该请求,直到回应完成前,该执行绪都不会被释放回容器. 执行绪会耗用系统资源,若有些请求需要长时间处理(例如长时间运算.等待某个资源),就 ...
- obj-fit
该 object-fit CSS 属性指定替换元素的内容应该如何适应到其使用的高度和宽度确定的框. 初始值 fill 适用于 替换元素 遗传 是 媒体 视觉 计算值 按规定 动画类型 离散的 为了规范 ...
- iOS开发 多屏尺的自动适配(转)
[iOS开发]多屏尺的自动适配 AutoLayout (纯代码方式) (2014-09-19 09:35:47) 转载▼ 标签: autolayout ios开发 xcode ui 分类: Xcode ...
- error: memcached support requires ZLIB. Use --with-zlib-dir=<DIR> to specify the prefix where ZLIB
yum install zlib-devel
- MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考
我们知道,MapReduce有三层调度模型,即Job——>Task——>TaskAttempt,并且: 1.通常一个Job存在多个Task,这些Task总共有Map Task和Redcue ...
- linux前后台任务切换管理
liuyuan@ebuinfo:/var/www/projects/PHPExcel/Examples$ vi 33chartcreate-line.php & [] liuyuan@ebui ...