注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

NodeJS学习(2)——如何编写简单的服务器  

来自沈超楠   2016-12-19 16:47:34|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
之前一次博客已经简单介绍了nodejs的一些基本知识,认识了nodejs的一些原理,但是nodejs毕竟是用来搭建响应速度快、易于扩展的网络应用的,我们学习的目标就是可以用它搭建一些网络应用,所以经过一段时间的学习实践,我获得了一些用nodejs搭建简单服务器的心得,简单介绍下。
首先,如果我们需要用nodejs搭建一些简单的服务器,只利用nodejs原本就拥有的模块,我们需要关注的是http模块。所以在实际的编写代码中,我们首先需要添加引用http模块,如下:

const http = require('http');

接下来,我们可以利用http模块中的creatServer(function(req,res){})方法快速的编写一个http服务器,如下:

var testserver = http.createServer(function(req,res){

});

可以看到,这个方法的参数是一个function,而这个function的参数req是服务器接收的请求,而res则是服务器的返回(这里方便理解直接写成res和req),这样你就获得了一个http.server的实例testserver。
然后,你可以使用listen这个方法来让这个testserver服务器监听某个端口,如下:

testserver.listen(8080,function(){
console.log("listen strart 8080 new\n");
});

那么,这个testserver就监听了8080这个端口(可以自行设置相应没被占用的端口),该listen方法第二个参数是一个回调函数,当服务器监听了某个端口后,就会调用这个函数,在这里我简单的输出了
"listen strart 8080 new\n",
我们会发现这种回调的样式在nodejs里会有很多,之前也讲过,nodejs的特点就是异步非阻塞嘛。
现在还有一个问题,我们的testserver服务器虽然监听了某个端口,但是并不会对收到的请求做任何处理,也不会有任何返回操作。所以我们需要添加相应的操作,如下:

var testserver = http.createServer(function(req,res){

res.writeHeader(200, {'Content-Type': 'text/html'});
res.end();

});

这个就是简单的编写了一个200的返回。
相对复杂的,我们可以做如下变化:

const fs = require('fs');

var testserver = http.createServer(function(req,res){

if(req.method=="GET"){

console.log ("reload");
var html = fs.readFileSync('/test/index.html');
res.writeHeader(200, {"Content-Type": "text/html"});
res.write(html);
res.end();
}

});

在这里我们又添加了fs模块,这个模块在nodejs中负责文件的操作。在这次操作中,我们首先判断了本次请求的类型为"GET",接着便读取了本地的一个index.html文件,并将之写进返回的res里,这样发送请求的客户端就会看到这个html页面。注意这里的读取html文件的函数fs.readFileSync('/test/index.html')是同步的(nodejs中添加了Sync的方法一般都是同步的),也就是只有确实的读完了这个文件,接下来的操作才会执行。
当然有时候我们也需要对客户端发来的数据内容进行处理,所以我们也可以做如下操作:

var testserver = http.createServer(function(req,res){

req.on('data',function(data){

console.log(data);

});

req.on('error',function(err)){

console.log(err);

});

});

这里我们可以利用req.on方法来处理收到的请求内容,比如收到了一定的data或者说某个请求有问题(error)。
需要注意,nodejs的特点是异步非阻塞,所以在编写代码时我们发现,在服务器这里收到请求时不需要我们自己去新建一个线程去处理,但是依旧可以同时处理多个请求,那是因为nodejs内部已经实现了这一套内容,所以写起来相当方便。
当然,以上的内容只是简单的介绍了如何利用nodejs快速新建一个http服务器,具体的方法还有很多,变化也很多,可以通过阅读nodejs的文档来学习,而且nodejs是开源的,阅读源码也会有很大帮助,这就是我近期学习nodejs的一些心得。


  评论这张
 
阅读(633)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017