搭建一个简单的服务器
通过下面的代码可以搭建一个简单的服务器:
var http = require("http"); http.createServer(function(request,response){ response.writeHead(200,{"Content-Type":"text/plain"}); response.write("hello my first demo"); response.end(); }).listen("8080"); console.log("server start");
搭建一个简单的服务器需要依赖http模块,通过http.createServer()来生成一个服务器实例通过listen()来启动这个实例。
http.createServer()参数是一个函数,这个函数的两个参数分别为request和response,request记录着从前端到服务器的各种信息,response记录从服务器端到前端的各种信息。
request有三个重要的属性:request.url:表示请求的地址,request.method:表示请求的方式,request.headers:表示所有的请求头信息。
另外我们可以通过request.setEncoding()来设置请求的编码。
我们也可以通过on()来为request的事件来注册处理函数,request.on()有两个事件分别为data和end,data表示正在接收数据,end表示数据接收完成,我们从前台向服务器发送数据常用的方式就是get和post,对于get请求我们可以直接从url中提取出传输的数据,而post的数据一般是放在请求体中的此时我们就需要data这个事件来获取前台的发送数据,使用方式为:
var postData = ""; request.on("data",function(data){ postData +=data; }); request.on("end",function(){ console.log(postData); });
在开始的例子中response.writeHead用来设置http返回的头信息,write()的参数表示要写入的内容,end()用来将write()的内容写入到response对象中。
listen()函数表示启动当前的http实例,listen()函数可以接收两个参数,第一个参数表示要监听的端口,第二个参数表示要监听的地址,也就是只有请求地址符合listen()的设置,http.createServer()里面的函数才会执行,listen()的默认地址为localhost。
处理不同的请求
上面的例子对于所有的请求执行的操作都是一样的,在实际开发中这个情况是不存在,我们需要针对不同的URL来做不同的处理,此时我们就需要对request对象的url属性进行判断了:
var http = require("http"); var demo = http.createServer(function(request,response){ var path = request.url; console.log(path); switch(path){ case "/homepage": response.writeHead(200,{"Content-Type":"text/plain"}); response.write("hello this is homepage"); response.end(); break; case "/details": response.writeHead(200,{"Content-Type":"text/plain"}); response.write("hello this is details"); response.end(); break; default: response.writeHead(404,{"Content-Type":"text/plain"}); response.write("sorry"); response.end(); break; } }).listen("8080"); console.log("server start");
返回一个html页面
上面的这些我们只是返回几个字而已,正常情况下我们返回的通常是一个完整的页面,如果我们在response.write()中拼一个html页面出来,就会很麻烦而且很容易出错,此时我们就可以利用fs模块来简化这个操作:
var http = require("http"); var fs = require("fs"); var demo = http.createServer(function(request,response){ var path = request.url; if(path=="/register"){ fs.readFile("register.html",function(err,data){ response.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}); response.write(data); response.end(); }); }else{ response.writeHead(200,{"Content-Type":"text/plain"}); response.write("hello node"); response.end(); } }).listen("8080"); console.log("server start");