之前一次博客已经简单介绍了nodejs的一些基本知识,认识了nodejs的一些原理,但是nodejs毕竟是用来搭建响应速度快、易于扩展的网络应用的,我们学习的目标是可以用它搭建一些网络应用,所以经过一段时间的学习实践,我获得了一些用nodejs搭建简单服务器的心得,简单介绍下。
  首先,如果我们需要用nodejs搭建一些简单的服务器,只利用nodejs原本拥有的模块,我们需要关注的是http模块。所以在实际的编写代码中,我们首先需要添加引用http模块,如下:
  consthttp=require('http');
  接下来,我们可以利用http模块中的creatServer(function(req,res){})方法快速的编写一个http服务器,如下:
vartestserver=http.createServer(function(req,res){
});
  可以看到,这个方法的参数是一个function,而这个function的参数req是服务器接收的请求,而res则是服务器的返回(这里方便理解直接写成res和req),这样你获得了一个http.server的实例testserver。
  然后,你可以使用listen这个方法来让这个testserver服务器监听某个端口,如下:
testserver.listen(8080,function(){
console.log("listenstrart8080new ");
});
  那么,这个testserver监听了8080这个端口(可以自行设置相应没被占用的端口),该listen方法第二个参数是一个回调函数,当服务器监听了某个端口后,会调用这个函数,在这里我简单的输出了
  "listenstrart8080new ",
  我们会发现这种回调的样式在nodejs里会有很多,之前也讲过,nodejs的特点是异步非阻塞嘛。
  现在还有一个问题,我们的testserver服务器虽然监听了某个端口,但是并不会对收到的请求做任何处理,也不会有任何返回操作。所以我们需要添加相应的操作,如下:
vartestserver=http.createServer(function(req,res){
res.writeHeader(200,{'Content-Type':'text/html'});
res.end();
});
  这个是简单的编写了一个200的返回。
  相对复杂的,我们可以做如下变化:
constfs=require('fs');
vartestserver=http.createServer(function(req,res){
if(req.method=="GET"){
console.log("reload");
varhtml=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的方法一般都是同步的),也是只有确实的读完了这个文件,接下来的操作才会执行。
  当然有时候我们也需要对客户端发来的数据内容进行处理,所以我们也可以做如下操作:
vartestserver=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的一些心得。