创建一个最基本的http服务,需要引入两个核心模块。
http模块及fs模块。
在http创建的服务里,有两个基本参数(request、response)
request能够获取,请求方法
request.method
、请求的url地址
request.url
、请求头
request.headers
(实际客户端传来的有,方法、url、协议版本(http协议)、请求头、请求体)
(服务器端要返回的有,协议版本、状态码头、状态码的原因短句、响应首部字段、响应体)
response能够设置,设置状态码
response.statusCode = 200;
、设置响应类型
response.setHeader('Content-Type','text/html;charset=utf-8')
、设置响应头
response.setHeader('name','zj');
、读取文件的内容并且将读到的内容写入响应体
fs.readFile('index.html', function (err, data) {
response.write(data);//写入响应体
response.end();
});
var http = require('http'); var fs = require('fs'); function serve(request,response){ //请求的方法//请求里的url地址 console.log(request.method,request.url); //console.log(request.headers);//获取请求头 response.statusCode = 200;//设置状态码 response.setHeader('Content-Type','text/html;charset=utf-8');//设置响应的类型,编码为utf-8 response.setHeader('name','zzz');//设置响应头 //读取文件的内容并且将读到的内容写入响应体 fs.readFile('index.html', function (err, data) { response.write(data);//写入响应体 response.end(); }); //fs.readFile是异步方法,通过回调函数来接收读取文件返回内容。 // fs.readFileSync是同步方法,通过返回值来接收文件返回内容。 } //每当有请求来的时候调用serve函数对客户端进行响应 var server = http.createServer(serve); server.listen(8080,'localhost');
优化服务代码,增加第三方mine模块,动态设置响应类型,根据客户端传来的url来加载对应的文件,写入响应体
var http = require('http'); var fs = require('fs'); var mime = require('mime'); function serve(request,response){ var url = request.url; if(url == '/'){ //设置响应的类型,编码为utf-8 response.setHeader('Content-Type','text/html;charset=utf-8'); //读取文件的内容并且将读到的内容写入响应体 fs.readFile('index.html', function (err, data) { response.write(data);//写入响应体 response.end(); }); //fs.readFile是异步方法,通过回调函数来接收读取文件返回内容。 // fs.readFileSync是同步方法,通过返回值来接收文件返回内容。 } else { static(url, response); } function static(url, response){ //设置响应的类型,编码为utf-8 response.setHeader('Content-Type',mime.lookup(url)+';charset=utf-8'); //读取文件的内容并且将读到的内容写入响应体 fs.readFile(url.slice(1), function (err, data) { response.write(data);//写入响应体 response.end(); }); } } //每当有请求来的时候调用serve函数对客户端进行响应 var server = http.createServer(serve); server.listen(8080,'localhost');
增加url模块,对url进行处理
var http = require('http'); var fs = require('fs'); var mime = require('mime'); var url = require('url'); //对URL进行处理,把字符串转成对象 function serve(request,response){ //true 表示query转成对象 var urlObj = url.parse(request.url,true); console.log(request.url ,urlObj.query.name,urlObj.query.age); if(urlObj.pathname == '/'){ //设置响应的类型,编码为utf-8 response.setHeader('Content-Type','text/html;charset=utf-8'); //读取文件的内容并且将读到的内容写入响应体 fs.readFile('index.html', function (err, data) { response.write(data);//写入响应体 response.end(); }); //fs.readFile是异步方法,通过回调函数来接收读取文件返回内容。 // fs.readFileSync是同步方法,通过返回值来接收文件返回内容。 } else if(urlObj.pathname == '/clock'){ var counter = 0; var int = setInterval(function () { response.write((new Date()).toString()); counter++; if(counter==5){ clearInterval(int); response.end(); } },1000) } else { static(urlObj.pathname, response); } function static(pathname, response){ //设置响应的类型,编码为utf-8 response.setHeader('Content-Type',mime.lookup(pathname)+';charset=utf-8'); //读取文件的内容并且将读到的内容写入响应体 fs.readFile(pathname.slice(1), function (err, data) { response.write(data);//写入响应体 response.end(); }); } } //每当有请求来的时候调用serve函数对客户端进行响应 var server = http.createServer(serve); server.listen(8080,'localhost');