构建web应用
var http = require('http');
http.createServer(function(req, res){
res.writeHeader(200, {Content-Type : 'text/plain'});
res.end('hello world!');
}).listen(80);
function(req, res){
var method = req.method;
if(method === 'POST'){
}else if(method === 'GET'){
}else if(method === 'DELETE'){
}else if(method === 'PUT'){
}else{
}
}
var url = require('url');
var fs = require('fs');
function(req, res){
var pathname = url.parse(req.url).pathname;
fs.readFile(path.join(ROOT, pathname), function(err, file){
if(err){
res.writeHeader(404);
res.end('not Found File');
return;
}
res.writeHeader(200);
res.end(file);
});
}
function(req, res){
var pathname = url.parse(req.url).pathname;
var paths = pathname.split('/');
var contronller = paths[1] || 'index';
var action = paths[2] || 'index';
var args = paths.slice(3);
if(handler[contronller] && handler[contronller][action]){
handler[contronller][action].apply(null, [req, res].concat(args));
}else{
res.writeHeader(500);
res.end('找不到响应控制器');
}
}
var url = require('url');
var query = url.parse(req.url, true).query;//{foo : 'aaa', baz : 'bbb'}
req.query = query;
handle(req, res);
function parseCookie(cookie){
var cookies = {};
if(!cookie){
return cookies;
}
var list = cookie.split(';');
for(var i = 0,len = list.length;i < len;i++){
var pair = list[i].split('=');
cookies[pair[0].trim()] = pair[1];
}
return cookies;
};
req.cookies = parseCookie(req.headers.cookie);
handle(req, res);
function serialize(name, value, options){
var pairs = [name+'='+value];
if(options.expires){
pairs.push('Expires='+options.expires.toUTCString());
}
if(options.maxAge){
pairs.push('Max-Age='+options.maxAge);
}
if(options.path){
pairs.push('Path='+options.path);
}
if(options.domain){
pairs.push('Domain='+options.domain);
}
if(options.httpOnly){
pairs.push('HTTPOnly');
}
if(options.secure){
pairs.push('Secure');
}
return pares.join(';');
}
res.writeHeader('Set-Cookie', serialize({isVisit : 1}));
var hasBody = function(req){
return 'transfer-encoding' in req.Headers || 'content-length' in req.Headers;
}
function(req, res){
if(hasBody(req)){
var buffers = [];
req.on('data', function(chunk){
buffers.push(chunk);
});
req.on('end', function(){
req.rawBody = Buffer.concat(buffers).toString();
handle(req, res);
});
}else{
handle(req, res);
}
};
req.body = querystring.parse(req.rawBody);
var mime = function(req){
return req.headers['content-type'].split(';')[0] || '';
}
var xml2js = require('xml2js');
var handle = function(req, res){
if(mime(req) === 'application/json'){
try{
req.body = JSON.parse(req.rowBody);
}catch(){
res.writeHeader('400');
res.end('invalid json');
return;
}
}
if(mime(req) === 'application/xml'){
xml2js.parseString(req,rawBody, function(err, xml){
if(err){
}else{
req.body = xml;
}
});
}
};
var formidable = require('formidable');
function(req, res){
if(hasBody(req)){
if(mime(req) === 'multipart/form-data'){
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files){
req.body = fields;
req.files = files;
handle(req, res);
});
}
}
}
var bytes = 1024;
function(req, res){
var received = 0;
var len = req.headers['content-length']?parseInt(req.headers['content-length'], 10):null;
if(len > bytes){
res.writeHeader(413);
res.end;
return;
}
res.on('data', function(chunk){
received += chunk.length;
if(received > bytes){
req.destroy();
}
});
handle(req, res);
};
构建web应用的更多相关文章
- NodeJs+http+fs+request+cheerio 采集,保存数据,并在网页上展示(构建web服务器)
目的: 数据采集 写入本地文件备份 构建web服务器 将文件读取到网页中进行展示 目录结构: package.json文件中的内容与上一篇一样:NodeJs+Request+Cheerio 采集数据 ...
- 使用EXtjs6.2构建web项目
一.项目简介 众所周知ext是一款非常强大的表格控件,尤其是里边的grid为用户提供了非常多的功能,现在主流的还是用extjs4.0-4.2,但是更高一点的版本更加符合人的审美要求.因此,在今天咱们构 ...
- 《深入浅出Node.js》第8章 构建Web应用
@by Ruth92(转载请注明出处) 第8章 构建Web应用 一.基础功能 请求方法:GET.POST.HEAD.DELETE.PUT.CONNECT GET /path?foo=bar HTTP/ ...
- 基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面
最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重 ...
- Eclipse中使用maven构建web项目中遇到的问题
构建过程参考: http://blog.csdn.net/smilevt/article/details/8215558/ http://www.cnblogs.com/dcba1112/archiv ...
- Node.js高级编程读书笔记 - 4 构建Web应用程序
Outline 5 构建Web应用程序 5.1 构建和使用HTTP中间件 5.2 用Express.js创建Web应用程序 5.3 使用Socket.IO创建通用的实时Web应用程序 5 构建Web应 ...
- 高效构建Web应用 教你玩转Play框架 http://www.anool.net/?p=577
Play 框架是一个完整的Web应用开发框架,覆盖了Web应用开发的各个方面.Play 框架在设计的时候借鉴了流行的 Ruby on Rails 和 Grails 等框架,又有自己独有的优势.使用 P ...
- threejs构建web三维视图入门教程
本文是一篇简单的webGL+threejs构建web三维视图的入门教程,你可以了解到利用threejs创建简单的三维图形,并且控制图形运动.若有不足,欢迎指出. 本文使用的框架是three.js gi ...
- axis2_1.6.2之构建web端和客户端 .
参考资料: http://blog.csdn.net/apei830/article/details/5448897 axis2的官网 http://axis.apache.org/axis2/jav ...
- 使用XFire+Spring构建Web Service(一)——helloWorld篇
转自:http://www.blogjava.net/amigoxie/archive/2007/09/26/148207.html原文出处:http://tech.it168.com/j/2007- ...
随机推荐
- luogu1447 [NOI2010]能量采集 莫比乌斯反演
link 冬令营考炸了,我这个菜鸡只好颓废数学题了 NOI2010能量采集 由题意可以写出式子: \(\sum_{i=1}^n\sum_{j=1}^m(2\gcd(i,j)-1)\) \(=2\sum ...
- java 柱状图、折线图、饼状图
1.绘制柱状图: //BarChartTool工具类代码 package GUIview; import HibernateTool.HibernateTools; import ProductCla ...
- composer.json 配置设置
配置文件的值为 key:val 必须双引号包裹 一.配置文件 名字 name包名称由用户名名称和仓库名称组成包版本限制来请求Monolog软件包 1.0.*.这意味着1.0开发分支中的任何版本,或大于 ...
- 数据结构4.3_字符串模式匹配——KMP算法详解
next数组表示字符串前后缀匹配的最大长度.是KMP算法的精髓所在.可以起到决定模式字符串右移多少长度以达到跳跃式匹配的高效模式. 以下是对next数组的解释: 如何求next数组: 相关链接:按顺序 ...
- HDU 1565 方格取数(简单状态压缩DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1565 对于每一个数,取或者不取,用0表示不取,1表示取,那么对于每一行的状态,就可以用一个二进制的数来表示.比如 ...
- 利用Shell脚本实现远程MySQL自动查询
下面这个脚本是一个简单用来执行远程数据库查询的命令,相信大家都能看得懂,这对于有些需要每天自动检查数据库或是执行某些语句的兄弟,是很有帮助的,只要稍加修改就可以 #!/bin/shHOST=192.1 ...
- getter与setter
var obj = { get a() { return 2; }, get c() { return 34 } } Object.defineProperty( obj, 'b', { get: f ...
- 【ACM】会场安排问题
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...
- JOIN 和 NULL
NULL值得数据出现在数据库发展的最初阶段的确给开发和使用者带来了很大的便利,这是因为它为我们节省了太多的磁盘空间,而且在那个年代磁盘是相当昂贵的.但是随着科技的发展,硬件系统的改进突飞猛进,NULL ...
- 虚拟机 ---- 最小化安装无法使用tab补全键
解决方法: 安装 yum -y install bash-completion 然后重启 注意:挂载时使用绝对路径的cdrom挂载, ls -l /dev/cdromvim /etc/fstab — ...