当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播

我来了!

拥有积分:3962
尚学堂雄起!!威武。。。

博客分类

笔记中心

课题中心

提问中心

答题中心

解答题中心

node.js构建http服务器(一)

我来了! 发表于 2年前 (2014-11-28 22:25:03)  |  评论(1)  |  阅读次数(1452)| 1 人收藏此文章,   我要收藏   

最近对node.js产生了兴趣,决定买书开干。碰巧公司决定技术革新,哇哈哈万分欣喜。在此把学习中的一些过程记录下

对于怎样安装node、环境搭建等基础内容暂不做介绍,有时间也会分享

在node中创建HTTP服务器是很轻松的,大概需要4个步骤,下面我一一分解

  1. 获取http模块

    var http = require('http');
  2. 创建http服务

    var server = http.createServer();
  3. 监听服务请求事件(request)

    server.on('request', function(req, res){
        res.writeHead(200,{'Content-Type':'text/plain'});
        res.write('Hello Word!');
        res.end();
    });
  4. 将服务绑定到TCP端口,如:4000

    server.listen(4000)

将以上代码保存在server.js文件中,使用命令node server.js启动服务,在浏览器中输入http://loaclhost:4000可以看到Hello Word!

通过上面的代码可以搭建一个可以运行的http服务,通过对上面代码的扩展我们可以搭建一个可以运行web的服务,也就是中间件(web容器)了

  • 首先,完善项目目录

    webroot就是存放web资源的目录,可以放web项目在里面,根据实现不同存放方式及项目类型也有所不同。其他目录就不多讲了

  • 其次,扩展server.js代码

    var fs = require('fs'),
        path = require('path');
    require('http').createServer(function(req, res) {
    
    	var uri = req.url
    	if (uri == "/" || uri == "") {
    		uri = "/index.html"
    	} else {
    		if(uri.indexOf('?') != -1){
    		    uri = uri.substr('0',uri.indexOf('?'))//截取url参数部分
    		}
    	}
    	
    	var file = path.normalize('./webroot' + uri);
    	console.log('Trying to serve', file);
    
    	/**
    	 * 定义服务端未知异常回调函数
    	 */
    	function reportError(err) {
    		console.log(err);
    		res.writeHead(500);
    		res.end('Internal Server Error');
    	}
    
    	path.exists(file, function(exists) {
    		if (exists) {
    			fs.stat(file, function(err, stat) {
    				var rs;
    				if (err) {
    					return reportError(err);
    				}
    				if (stat.isDirectory()) {
    					res.writeHead(403);
    					res.end('Forbidden')
    				} else {
    					rs = fs.createReadStream(file);
    					rs.on('error',reportError);
    					var postfix = uri.substr(uri.lastIndexOf('.')); //取url后缀
    					if (postfix.indexOf('html') != -1) {
    						res.writeHead(200, {
    							'Content-Type': 'text/html'
    						});
    					}else{
    						res.writeHead(200);
    					}
    					rs.pipe(res);
    				}
    			})
    		} else {
    			//404错误
    			res.writeHead(404);
    			res.end('Not found')
    		}
    	})
    
    }).listen(4000, function() {
    	console.log('http server port 4000');
    });
  • 最后,完善html资源部分内容,可以加一些css、js、图片后访问看看效果

    访问http://loaclhost:4000效果

    控制台输出内容

好了node构建http服务器告一段落,现在已经可以拿node做一个简单的web应用了,根据node的一些特性,根据现在的内容,进一步思考就可以实现一个可以交互的web;

只有这些就可以做web容器么?no no no

还差很远比如安全,性能,可靠性、可用性等都要考虑,所以还要继续学习其他内容


分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183