nodeJS入门01-http模块

http模块

Node.js中,将很多的功能,划分为了一个个module,因为并不是所有的程序都会使用所有的模块,所以当你需要用到哪个功能的时候,就require哪个模块,这样可以提高程序运行的效率。传统的HTPP服务器会由Aphche、Nginx、IIS之类的软件来担任,但是nodejs并不需要,nodejs提供的http模块就可以用来搭建一个服务器。在本篇中,我们从一个最简单的实例出发,来简单介绍一下http模块。

//引用模块
var http=require("http");
//创建一个服务器,回调函数表示接收到请求之后做的事情
var server=http.createServer(function (req,res) {
    res.writeHead(200,{"content-type":"text/plain"});
    res.write("hello nodejs");
    res.end();
});
//监听端口
server.listen(3000,"127.0.0.1");

运行上面程序,然后在浏览器中输入http://127.0.0.1:3000/,这时候在页面中我们可以看到如下结果

这表明这个最简单的nodejs服务器已经搭建成功了。

上面的createServer方法中的回调函数中的两个参数req和res则是分别代表了请求对象和响应对象。其中req是http.IncomingMessage的实例,res是http.ServerResponse的实例。

http.IncomingMessage

http.IncomingMessage是HTTP请求的信息,是后端开发者最关注的内容,一般由http.Server的request事件发送,并作为第一个参数传递,http请求一般可以分为两部分:请求头和请求体。其提供了3个事件,如下:

  • data:当请求体数据到来时,该事件被触发,该事件提供一个参数chunk,表示接受的数据,如果该事件没有被监听,则请求体会被抛弃,该事件可能会被调用多次(这与nodejs是异步的有关系)
  • end:当请求体数据传输完毕时,该事件会被触发,此后不会再有数据
  • close:用户当前请求结束时,该事件被触发,不同于end,如果用户强制终止了传输,也是用close。

http.IncomingMessage的属性如下:

在req中,最关键的就是req.url属性,表示用户的请求URL地址。所有的路由设计,都是通过req.url来实现的。我们比较关心的不是拿到URL,而是识别这个URL。识别URL,将用到一个新模块,就是url模块,这个等下后面再讲。

http.ServerResponse

http.ServerResponse是返回给客户端的信息,决定了用户最终看到的内容。它有三个重要的成员函数,用于返回响应头、响应内容以及结束请求。

  • res.writeHead(statusCode,[heasers]):向请求的客户端发送响应头,该函数在一个请求中最多调用一次,如果不调用,则会自动生成一个响应头
  • res.write(data,[encoding]):想请求的客户端发送相应内容,data是一个buffer或者字符串,如果data是字符串,则需要制定编码方式,默认为utf-8,在res.end调用之前可以多次调用
  • res.end([data],[encoding]):结束响应,告知客户端所有发送已经结束,当所有要返回的内容发送完毕时,该函数必需被调用一次,两个可选参数与res.write()相同。如果不调用这个函数,客户端将用于处于等待状态。

 url模块

在上面http模块中,我们讲到,要识别url,将会用到url模块,跟http模块一样,要用到这个模块,我们首先需要引入这个模块。

var url=require("url");

url模块一共提供了以下三个方法

  • url.parse():将一个url的字符串解析并返回一个url的对象
  • url.format():将json对象格式化成字符串
  • url.resolve():返回从根目录指定到当前目录的绝对路径url

在下面实例中,我们模拟表单提交,来讲解一下parse的用法。

我们首先准备一个表单,当我们点击提交的时候,将填写的结果提交到我们搭建的服务器上:

        <form action="http://127.0.0.1:3000/" method="get">
            <input type="text" name="name"/>
            <input type="text" name="age">
            <input type="submit" value="提交"/>
        </form>

服务端代码:

//引用模块
var http=require("http");
var url=require("url");
//创建一个服务器,回调函数表示接收到请求之后做的事情
var server=http.createServer(function (req,res) {
    res.writeHead(200,{"content-type":"text/plain;charset=utf-8"});
    var queryObj=url.parse(req.url,true).query;
    res.write("姓名是:"+queryObj.name+"年龄是:"+queryObj.age);
    res.end();
});
//监听端口
server.listen(3000,"127.0.0.1");

运行结果如下:

原文地址:https://www.cnblogs.com/xuxiaozhi/p/7875255.html