node http 基础

创建一个最基本的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');

 

posted @ 2017-12-05 09:40  星光璀璨的夜空  阅读(201)  评论(0编辑  收藏  举报