在浏览器输入存在的网址的一个交互过程

1.用户通过浏览器发送一个http的请求到指定的主机

2.服务器接收到该请求,对该请求进行分析和处理

3.服务器处理完成以后,返回对应的数据到用户机器

4.浏览器接收服务器返回的数据,并根据接收到的进行分析和处理

由客户端发送一个http请求到指定的服务端 -> 服务端接收并处理请求 -> 返回数据到客户端

http模块概述

引入http模块:搭建一个http的服务器,用于处理用户发送的http请求,需要使用node提供一个模块 http

var http = require('http');

创建服务器对象方法:创建并返回一个HTTP服务器对象,requestListener : 监听到客户端连接的回调函数

var server = http.createServer([requestListener]);

监听客户端请求:监听客户端连接请求,只有当调用了listen方法以后,服务器才开始工作

server.listen(port, [hostname], [backlog], [callback]);
// port : 监听的端口 ,不指定端口号,系统会自动分配一个;
// hostname : 主机名(IP/域名);
// backlog : 连接等待队列的最大长度;
// callback : 调用listen方法并成功开启监听以后,会触发一个listening事件,callback将作为该事件的执行函数

listening事件:当server调用listen方法并成功开始监听以后触发的事件

server.on('listening', function() {
    console.log('listening...');
})

error事件:当服务开启失败的时候触发的事件,参数err : 具体的错误对象

server.on('error', function(err){
    console.log(err);
});

request事件: 当有客户端发送请求到该主机和端口的请求的时候触发.

参数request : http.IncomingMessage的一个实例,通过他我们可以获取到这次请求的一些信息,比如头信息,数据等;

server.on("request",function (req,res) {
    console.log('有客户端请求了........');

    console.log(req.headers); // 请求头信息中的数据
    console.log(req.httpVersion); // 使用的http协议版本
    console.log(req.url); // 请求地址,这个地址指的是域名后面的地址(路由)
    console.log(req.method); // 请求方式
})

参数response : http.ServerResponse的一个实例,通过他我们可以向该次请求的客户端输出返回响应

server.on("request",function (req,res) {
    console.log('有客户端请求了........');

    // 设置返回头信息,独立进行头部信息设置,对发送的数据不会产生任何的影响
    res.setHeader('miaov', 'leo');

    // writeHead(statusCode, [reasonPhrase], [headers]): 这个方法只能在当前请求中使用一次,并且必须在response.end()之前调用
    // 第一个参数:是状态码,用来标识服务器处理后的状态 第二个参数:是对应着第一个参数状态码的描述信息,是一个字符串,不写默认是跟状态码相对应的默认描述
    // 第三个参数:是一个对象,这个参数是要告诉浏览器,我将要发送的数据类型是什么
    // 这个方法最好写在write方法之前调用
    res.writeHead(200, 'miaov', {
        'content-type' : 'text/html;charset=utf-8'   //表示要发送html的文本数据类型,浏览器会对相应的数据类型进行解析
    });

    // write(chunk, [encoding]) : 发送一个数据块到响应正文中(将数据写入到客户端),第一个参数:要发送的数据,第二个参数:编码(可选)
    res.write('<h1>hello</h1>');

    // 当所有的正文和头信息发送完成以后调用该方法告诉服务器数据已经全部发送完成了,这个方法在每次完成信息发送以后必须调用,并且是最后调用
    // 第一个参数:要发送的数据 第二个参数:编码,这个方法同样可以向客户端发送数据,并且发送完数据之后会结束这次请求
    res.end();
})

response.end()方法产生两次访问的问题

var http = require('http'); //http是node中自带的一个模块,引入即可使用

http.createServer(function (request,response) {
    response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
    if(request.url !== "/favicon.ico"){  // 清除第二次访问
        console.log("访问");

        response.write("hello world");
        response.end("")  // 不写这个方法则会没有http协议尾,写了会产生两次访问
    }
}).listen(9000)

node基础—http模块的更多相关文章

  1. node基础篇二:模块、路由、全局变量课堂(持续)

    今天继续更新node基础篇,今天主要内容是模块.路由和全局变量. 模块这个概念,在很多语言中都有,现在模块开发已经成为了一种潮流,它能够帮助我们节省很多的时间,当然咱们的node自然也不能缺少,看下例 ...

  2. Node基础篇(模块和NPM)

    核心模块 核心模块的意义 如果只是在服务器运行JavaScript代码,意义并不大,因为无法实现任何功能(读写文件,访问网络). Node 的用处在于它本身还提供的一系列功能模块,用于与操作系统互动. ...

  3. Node.js实战项目学习系列(5) node基础模块 path

    前言 前面已经学习了很多跟Node相关的知识,譬如开发环境.CommonJs,那么从现在开始要正式学习node的基本模块了,开始node编程之旅了. path path 模块提供用于处理文件路径和目录 ...

  4. node基础(二)_模块以及处理乱码问题

    一.前言 本次内容主要包括: 1.node.js中的模块系统 2.解决上篇中服务器响应的汉字乱码问题 二.知识 1.node中的模块   分为三种: 核心模块(node定义的如前面用到的fs,http ...

  5. Node.js Web模块

    什么是Web服务器? Web服务器是处理由HTTP客户端发送的,如web浏览器的HTTP请求的软件应用程序,并返回响应于客户端网页. Web服务器通常伴随着图片,样式表和脚本的HTML文档. 大多数W ...

  6. Node.js:模块

    概要:本篇博客主要介绍node.js的模块 1.创建模块 在node.js中创建一个模块非常简单,因为一个文件就是一个模块.我们只需要明白如何从其他文件中获取这个模块.Node.js提供了 expor ...

  7. node基础知识

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个可以让 JavaScript 运行在服务器端的平台 Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  8. Node.js之模块机制

    > 文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. ![file](https://img2018.cnblogs.com/blog/830272/20 ...

  9. node.js中模块和包

    node.js中模块和包 什么是模块 如何创建并加载模块 1. 创建模块 2. 单次加载 3. 覆盖 exports 如何创建一个包 1. 作为文件夹的模块 2. package.json 如何使用包 ...

随机推荐

  1. ADO.NET基础学习 一(连接数据库)

    (记录下方便自己复习) 概念 简单地理解为用来连接数据库的类. 工作流程 ①Connection对象用来连接数据库. 两种连接方式:Windows身份验证 / sqlserver验证 private ...

  2. 关于Maven项目build时出现No compiler is provided in this environment的处理

    版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/lslk9898/article/details/73836745 近日有同事遇到在编译Maven项目时 ...

  3. sql查询语句时怎么把几个字段拼接成一个字段

    sql查询语句时怎么把几个字段拼接成一个字段SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10) ...) a ...

  4. 4. explain简介

    一.是什么 使用 explain 关键字可以模拟优化器执行SQl查询语句,从而知道 mysql 是如何处理你的sql语句的.分析你的查询语句或是表的结构的性能瓶颈. 二.能干嘛 表的读取顺序 数据读取 ...

  5. Java学习笔记之——static关键字

    static属于类的,不属于任何一个对象的 static关键字的应用场景: 1.静态代码块:在类下用static修饰的代码块 static{ 代码: } 只能执行一次,是在第一次使用类之前执行 类加载 ...

  6. oracle中rownum的使用

    rownum是系统的一个关键字,表示行号,是系统自动分配的,第一条符合要求的数据行号就是1,第二条符合要求的数据行号就是2. Rownum 不能直接使用 例:取前多少条数据: 取中间的一些数据: se ...

  7. 程序员晋级CTO之路的8大准则

    推荐阅读: 大数据智慧平台落地方案 Nginx + 阿里云SSL + tomcat 实现https访问代理 永远别忘了TD 再确认测试代码前,先找别人帮你检查下是否无误.在别人做之前尽量检查出bug并 ...

  8. LeNet训练MNIST

    jupyter notebook: https://github.com/Penn000/NN/blob/master/notebook/LeNet/LeNet.ipynb LeNet训练MNIST ...

  9. blfs(systemd版本)学习笔记-安装、配置和使用wpa_supplicant无线网络连接工具

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! wireless项目地址:http://www.linuxfromscratch.org/blfs/view/stable-sy ...

  10. 08-HTML-框架标签

    <html> <head>  <title>框架标签学习</title>  <meta charset="utf-8"/> ...