美文网首页
Node.js HTTP模块

Node.js HTTP模块

作者: 前白 | 来源:发表于2020-03-18 10:15 被阅读0次

内置HTTP模块

Node.js中有HTTP这个一个内置模块,它允许Node.js通过超文本传输协议(HTTP)传输数据。

要用到HTTP模块,可以使用require()方法:

var http = require('http');

简单服务器的创建

Node.js中的HTTP模块可以创建一个HTTP服务器,该服务器侦听服务器端口并将响应返回给客户端。

使用createServer()方法创建HTTP服务器,如下所示:

var http = require('http');
http.createServer(function (req, res) {
  res.write('Hello xkd'); 
  res.end(); 
}).listen(8888); 

在命令工具中启动Node.js文件,打开浏览器,访问http://127.0.0.1:8888/,就可以看到页面显示'Hello xkd'了,这表示一个最简单的服务器搭建成功了。

Node.js中的http模块中封转了一个HTTP服务器和一个简单的HTTP客户端,http.Server是一个基于事件的http服务器,http.request则是一个http客户端工具,用于向http服务器发起请求。createServer()方法中的参数后汉书中的两个参数req和res分别代表了请求对象和响应对象。其中req是http.IncomingMessage的实例,res是http.ServerResponse的实例。

http服务器

除了使用createServer()方法返回一个http.Server对象来创建服务器,还可以使用下列方法来实现:

var http = require("http");
var server = new http.Server();

server.on("request",function(req,res){
    res.writeHead(200,{        
      "content-type":"text/plain; charset=utf-8"
    });
    res.write("xkd");
    res.end();
});
server.listen(8888);

创建一个http.Server对象,然后为其添加request事件监听。

http.Server的事件

http.Server是一个基于事件的服务器,继承自EventEmitter。http.Server提供的事件如下:

  • request:当客户端请求到来时,该事件被触发,提供两个参数req和res,表示请求和响应信息,是最常用的事件。

  • connection:当TCP连接建立时,该事件被触发,提供一个参数socket,是net.Socket的实例。

  • close:当服务器关闭时,触发事件(注意不是在用户断开连接时)。

http客户端

http模块提供了两个函数http.request和http.get,功能是作为客户端向http服务器发起请求。

http.request(option,callback)

接受两个参数,option是一个类似关联数组的对象,表示请求的参数。callback是请求的回调函数,需要传递一个参数。

示例:

var http=require('http');
var querystring=require('querystring');
//启动服务
http.createServer(function(req,res){
    console.log('开始请求,解析参数');
    //解析post请求
    var post='';
    req.on('data',function(chunk){
        post+=chunk;
    });
    req.on('end',function(){
        post=querystring.parse(post);
        //解析完成
        console.log('参数解析完成,返回name参数');
        res.end(post.name);
    });
}).listen(8888);
 
 
//客户端请求
var contents=querystring.stringify({
    name:'Tom',
    age:18,
    city:'beijing'
});

//声明请求参数
var options={
    host:'localhost',
    path:'/',
    port:8888,
    method:'POST',
    headers:{
        'Content-Type':'application/x-www-form-urlencoded',
        'Content-Length':contents.length
    }
};
//发送请求
var req=http.request(options,function(res){
    res.setEncoding('utf-8');
    res.on('data',function(data){
        console.log('后台返回数据');
        console.log('name参数的值为:' + data);
    })
});
req.write(contents);
//必须调用end()
req.end();

启动文件:

> node file.js
开始请求,解析参数
参数解析完成,返回name参数
后台返回数据
name参数的值为:Tom
http.get(option,callback)

是http.request方法的简化版,唯一区别积水http.get自动将请求方法设为了GET请求,同时不需要手动调用req.end()。如果我们使用http.request方法时没有调用end方法,服务器将不会收到信息。

示例:
var http=require('http');
var url=require('url');
var util=require('util');
//启动服务
http.createServer(function(req,res){
    console.log('开始请求,解析参数');
    var params=url.parse(req.url,true);
    console.log('解析完成');
    console.log(util.inspect(params));
    console.log('向客户端返回name');
    res.end(params.query.name);
}).listen(8888);
 
//客户端请求
var request=http.get({
    host:'localhost',
    path:'/user?name=Tom&age=18&city=beijing',
    port:8888},function(res){
    res.setEncoding('utf-8');
    res.on('data',function(data){
        console.log('服务端相应name值为:'+data);
    })
});

启动文件:

>node file.js
开始请求,解析参数
解析完成
Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?name=Tom&age=18&city=beijing',
  query: { name: 'Tom', age: '18', city: 'beijing' },
  pathname: '/user',
  path: '/user?name=Tom&age=18&city=beijing',
  href: '/user?name=Tom&age=18&city=beijing' }
向客户端返回name
服务端相应name值为:Tom

链接:https://www.9xkd.com/

相关文章

  • Node.js HTTP模块

    内置HTTP模块 Node.js 中有 HTTP 这个内置模块,HTTP 模块允许 Node.js 通过超文本传输...

  • 兄弟会8.9号笔记

    node.js模块学习 http 模块 fs 模块 url 模块 http 模块 HTTP http.STA...

  • Node.js HTTP模块

    内置HTTP模块 Node.js中有HTTP这个一个内置模块,它允许Node.js通过超文本传输协议(HTTP)传...

  • Node.js与内置模块

    目录: 认识Node.js fs文件系统模块 path路径模块 http模块 认识Node.js 为啥JavaSc...

  • Node模块之http模块(七)

    Node.js标准库提供了 http 模块,是Node.js中非常重要的一个核心模块。通过http模块,你可以使用...

  • Node.js 之 http模块

    http模块 引入http模块 开启一个本地服务器需要Node.js中http核心模块http--模块提供了搭建本...

  • Nodejs的模块引入与回调函数

    Node.js模块系统 在 Node.js 中,引入一个模块 如: var http=require('fs');...

  • Node.js(七)HTTP模块http

    http是Node.js的核心模块之一,要使用http模块,需要:const http = require('ht...

  • http模块

    什么是http模块 http模块是Node.js官方提供的、用来创建web服务器的模块。通过 http模块提供的h...

  • Node.js Web 模块

    Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务...

网友评论

      本文标题:Node.js HTTP模块

      本文链接:https://www.haomeiwen.com/subject/byqqyhtx.html