zoukankan      html  css  js  c++  java
  • 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");

    运行结果如下:

  • 相关阅读:
    chrome 开发者工具——前端实用功能总结
    而立之年——回顾我的前端转行之路
    编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(修订版)
    手把手带你入门前端工程化——超详细教程
    手把手教你搭建 Vue 服务端渲染项目
    前端项目自动化部署——超详细教程(Jenkins、Github Actions)
    前端国际化辅助工具——自动替换中文并翻译
    深入了解 webpack 模块加载原理
    实现一个 webpack loader 和 webpack plugin
    博客本地编辑器-OpenLiveWriter安装使用
  • 原文地址:https://www.cnblogs.com/xuxiaozhi/p/7875255.html
Copyright © 2011-2022 走看看