Node.js基础常用知识点全总结(二)

简介: Node.js基础常用知识点全总结

三.Node.js的常用内置模块


下面开始总结Node.js的内置模块了,如果你是入门学习的话,推荐按照本文顺序来学,学习思路会更清晰。如果你只是要查阅相关模块的用法,可以从目录索引导航到那一个模块。


1. http模块


http模块是 Node.js 网络的关键模块。可以使用以下代码引入:


const http = require('http')


该模块提供了一些属性、方法、以及类。我们要学习的就是一些常用的属性、方法、以及类的使用。

常用方法:

(1) http.createServer() :用于返回 http.Server 类的新实例。

用法:


const server = http.createServer((req, res) => {
  //使用此回调处理每个单独的请求。
})

(2) http.request() :用于发送 HTTP 请求到服务器,并创建 http.ClientRequest 类的实例。


(3) http.get() :类似于 http.request(),但会自动地设置 HTTP 方法为 GET,并自动地调用 req.end()。


常用属性:


(1) http.METHODS :此属性列出了所有支持的 HTTP 方法。像什么GET、POST、DELETE等等。


const http=require('http');
console.log(http.METHODS)

68e5b90a19274483afc71fee3cb36493.png


(2) http.STATUS_CODES :此属性列出了所有的 HTTP请求的状态代码及其描述。


const http=require('http');
console.log(http.STATUS_CODES)


06930ce1e2334f81b549fe665cd60012.png


常用类:

HTTP 模块提供了5 个很常用的类,分别如下:

(1) http.Agent :Node.js 会创建 http.Agent 类的全局实例,以管理 HTTP 客户端连接的持久性和复用,这是 Node.js HTTP 网络的关键组成部分。该对象会确保对服务器的每个请求进行排队并且单个 socket 被复用,它还维护一个 socket 池。


(2) http.ClientRequest :当 http.request() 或 http.get() 被调用时,会创建 http.ClientRequest 对象。当响应被接收时,则会使用响应(http.IncomingMessage 实例作为参数)来调用 response 事件。返回的响应数据可以通过以下两种方式读取:


可以调用 response.read() 方法。

在 response 事件处理函数中,可以为 data 事件设置事件监听器,以便可以监听流入的数据。

(3) http.Server : 当使用 http.createServer() 创建新的服务器时,通常会实例化并返回此类。拥有服务器对象后,就可以访问其方法:


close() 停止服务器不再接受新的连接。

listen() 启动 HTTP 服务器并监听连接。


(4) http.ServerResponse :由 http.Server 创建,并作为第二个参数传给它触发的 request 事件。通常在代码中用作 res:


const server = http.createServer((req, res) => {
  //res 是一个 http.ServerResponse 对象。
})

这个类的以下这些方法用于与 HTTP 消息头进行交互:


image.png


在处理消息头之后,可以通过调用 response.writeHead()(该方法接受 statusCode 作为第一个参数,可选的状态消息和消息头对象)将它们发送给客户端。


若要在响应正文中发送数据给客户端,则使用 write()。 它会发送缓冲的数据到 HTTP 响应流。


如果消息头还未被发送,则使用 response.writeHead() 会先发送消息头,其中包含在请求中已被设置的状态码和消息,可以通过设置 statusCode 和 statusMessage 属性的值进行编辑:

response.statusCode = 500
response.statusMessage = '内部服务器错误'

(5) http.IncomingMessage


该类的对象可通过这两种方式创建:http.Server,当监听 request 事件时。http.ClientRequest,当监听 response 事件时。


它可以用来访问响应:

使用 statusCode 和 statusMessage 方法来访问状态。

使用 headers 方法或 rawHeaders 来访问消息头。

使用 method 方法来访问 HTTP 方法。

使用 httpVersion 方法来访问 HTTP 版本。

使用 url 方法来访问 URL。

使用 socket 方法来访问底层的 socket。


2. http模块简单案例实践


创建一个server.js,我们一点一点来用这个http模块:


const http=require('http')
// 创建服务器
http.createServer((req,res)=>{
    //接收浏览器传的参数,返回渲染的内容,都在这个回调函数里面来做
    //req是接收的浏览器的参数,res是返回给浏览器渲染的内容。
}).listen(3000,()=>{
    console.log("server start")
})
/* listen()方法的第一个参数是端口号,第二个参数是一个回调函数,这个回调函数是服务器创建成功后执行的函数 */


命令行运行node server.js ,会看到server start打印在控制台了,并且光标在闪动,这表示服务创建成功,并监听了这个服务。现在浏览器访问http://localhost:3000/,浏览器还访问不到任何东西,因为我们没有返回任何数据。


我们可以在createServer()的回调里面调用res.write()对浏览器进行输出,res.write()可以调用多次,都会输出在浏览器上。但要注意,最后一定要掉用res.end()。不然浏览器会一直等,直到超时。


const http=require('http')
// 创建服务器
http.createServer((req,res)=>{
    //接收浏览器传的参数,返回渲染的内容,都在这个回调函数里面来做
    //req是接收的浏览器的参数,res是返回给浏览器渲染的内容。
    //可以用res.write()方法,向浏览器输出内容,并且可以写多个
    res.write("hello world")
    res.write(" abc")
    //但要注意,最后一定要掉用res.end()。不然浏览器会一直等,直到超时。但end()后不能再进行其他操作了
    res.end()
}).listen(3000,()=>{
    console.log("server start")
})
/* listen()方法的第一个参数是端口号,第二个参数是一个回调函数,这个回调函数是服务器创建成功后执行的函数 */


我们改完代码记得重新运行node server.js,重启服务,例如访问http://localhost:3000/。


8ab5a23b6a2b49199da633f591b78743.png


res.end()里面也可以传东西,也会在浏览器输出显示,如输出字符串。

const http=require('http')
// 创建服务器
http.createServer((req,res)=>{
    //接收浏览器传的参数,返回渲染的内容,都在这个回调函数里面来做
    //req是接收的浏览器的参数,res是返回给浏览器渲染的内容。
    //可以用res.write()方法,向浏览器输出内容,并且可以写多个
    res.write("hello world")
    res.write(" abc")
    //但要注意,最后一定要掉用res.end()。不然浏览器会一直等,直到超时。但end()后不能再进行其他操作了
    res.end("[1,2,3]")
}).listen(3000,()=>{
    console.log("server start")
})
/* listen()方法的第一个参数是端口号,第二个参数是一个回调函数,这个回调函数是服务器创建成功后执行的函数 */


a30ea0a0b00a448aaaacd25bc485d775.png

res.write()方法可以返回html标签,浏览器会渲染成html格式:


const http=require('http')
// 创建服务器
http.createServer((req,res)=>{
    //接收浏览器传的参数,返回渲染的内容,都在这个回调函数里面来做
    //req是接收的浏览器的参数,res是返回给浏览器渲染的内容。
    //res.write()方法可以返回html标签,浏览器会渲染成html格式
    res.write(`
        <h1>hello world</h1>
        <h1>你好害恶细君</h1>
    `)
    //但要注意,最后一定要掉用res.end()。不然浏览器会一直等,直到超时。但end()后不能再进行其他操作了
    res.end()
}).listen(3000,()=>{
    console.log("server start")
})
/* listen()方法的第一个参数是端口号,第二个参数是一个回调函数,这个回调函数是服务器创建成功后执行的函数 */

a43842500adb4b00bbe255774d0448dd.png

虽然res.write()能在浏览器上生成html标签,但是却出现了一个问题,就是中文乱码。我们要通过使用res.writeHead()方法来给浏览器返回消息响应头

const http=require('http')
// 创建服务器
http.createServer((req,res)=>{
    //接收浏览器传的参数,返回渲染的内容,都在这个回调函数里面来做
    //req是接收的浏览器的参数,res是返回给浏览器渲染的内容。
    //使用res.writeHead()方法来给浏览器返回消息响应头
    res.writeHead(200,{"Content-Type": "text/html; charset=utf-8"})
    //res.write()方法可以返回html标签,浏览器会渲染成html格式
    res.write(`
        <h1>hello world</h1>
        <h1>你好害恶细君</h1>
    `)
    //但要注意,最后一定要掉用res.end()。不然浏览器会一直等,直到超时。但end()后不能再进行其他操作了
    res.end()
}).listen(3000,()=>{
    console.log("server start")
})
/* listen()方法的第一个参数是端口号,第二个参数是一个回调函数,这个回调函数是服务器创建成功后执行的函数 */


此时,重启服务再访问浏览器时会就发现不会中文乱码了。


5865152f41d6442ea37c5d2531d7e3ba.png


我们再来研究一下createServer()的回调里面的req,我们可以控制台打印一下这个req对象,会打印出非常多的东西,其中就有一个url属性,我们打印一下看看:


const http=require('http')
// 创建服务器
http.createServer((req,res)=>{
    //打印一下req.url
    console.log(req.url)
    res.writeHead(200,{"Content-Type": "text/html; charset=utf-8"})
    res.end()
}).listen(3000,()=>{
    console.log("server start")
})


我们运行后,在浏览器里面访问http://localhost:3000/haiexijun 等路径,会发现req.url打印的就是这个路径:


6ed56069cdc84cd193b3491fe8095648.png


到这里,我们就可以实现一个通过不同url路径来返回浏览器不同内容的功能:


const http=require('http')
// 创建服务器
http.createServer((req,res)=>{
    res.writeHead(renderStatus(req.url),{"Content-Type": "text/html; charset=utf-8"})
    res.write(renderHTML(req.url))
    res.end()
}).listen(3000,()=>{
    console.log("server start")
})
function renderHTML(url){
    switch (url){
        case '/haiexijun':
            return `
            <html>
            <h1>你好害恶细君</h1>
            </html>
            `
        case '/world':
            return `
            <html>
            <h1>你好世界</h1>
            </html>
            `
        default :
            return `
            <html>
            <h1>404 not found</h1>
            </html>
            `
    }
}
function renderStatus(url){
    var arr=["/haiexijun","/world"]
    return arr.includes(url)?200:404
}


上面案例中,只有访问 /haiexijun和/world 时才能访问到正确的页面,访问其他的路径时,就都会显示404 not found 的页面,并且状态码也会为404.


fa4aacf633684d629ef4d643786d5f0d.png

5667b61e6d954c439f634a61110ec1b8.png


这里稍微体验一下就好,后面会学路由的模块和一些框架,http模块暂时就玩到这里。



相关文章
|
5月前
|
JavaScript 前端开发 CDN
总结 vue3 的一些知识点:Vue.js 安装
总结 vue3 的一些知识点:Vue.js 安装
|
5月前
|
XML JSON 前端开发
|
5月前
|
JavaScript
总结 vue3 的一些知识点:​Vue.js 条件语句​
总结 vue3 的一些知识点:​Vue.js 条件语句​
|
9天前
|
JavaScript 前端开发 Java
JavaScript 类知识点概览
概览JavaScript中类的知识点,包括类的定义和实现、添加方法和get/set方法、类的继承和静态方法的使用。通过学生类和人员类的例子,演示了类的构造器、方法定义、继承关系和静态方法的调用。
JavaScript 类知识点概览
|
2月前
|
JavaScript 前端开发
JavaScript 知识点总结
JavaScript 知识点总结JavaScript 是一种广泛应用于前端开发的编程语言。本文将总结一些常见的 JavaScript 知识点,帮助你更好地理解和应用这门语言。 一、基本语法和数据类型 变量声明:使用 var、let 或 const 声明变量。var 声明的变量具有函数作用域,而 let 和 const 声明的变量具有块级作用域。 var x = 10; let y = 20; const z = 30; 数据类型:JavaScript 中有以下几种基本数据类型:String(字符串)、Number(数字)、Boolean(布尔值)、Undefined(未定义)、Null(空值
35 3
|
5月前
|
JavaScript 前端开发 Java
前端知识点03(JS)
前端知识点概览:了解JS中的this指向,包括全局、函数、new、apply/call/bind及箭头函数的规则。理解script的async和defer属性对脚本加载和执行的影响。探讨setTimeout和setInterval的用法及其在性能上的考量。ES6与ES5的区别在于新语法特性,如let/const、箭头函数、模板字符串、模块化、类和继承等。此外,ES6还引入了Symbol、解构赋值、默认参数、Map/Set和Generator等功能。别忘了点赞和支持作者哦!
44 1
|
5月前
|
存储 缓存 前端开发
< 今日份知识点:Javascript本地存储的方式有哪些?区别及应用场景? >
在前端开发中,偶尔需要存储一些如: 用户信息、登录状态、历史记录等常量数据。用于后续二次调用,并且避免刷新后丢失。这时,就需要用到本地存储了。 在`JavaScript` 中,提供了四种可用的本地存储方式: **`cookie`** ,**`sessionStorage`**, **`localStorage`**, **`indexedDB`** ( 已废除的 `WebSQL` )。四种方式各有千秋,接下来,就由小温带各位卷王了解一下,`Javascript` 中的本地存储吧
< 今日份知识点:Javascript本地存储的方式有哪些?区别及应用场景? >
|
11月前
|
JavaScript 前端开发 数据库
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)-3
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)
93 0
|
5月前
|
JavaScript 前端开发 Java
[javascript]知识点
如果文中阐述不全或不对的,多多交流。
165 0
[javascript]知识点
|
5月前
|
JavaScript 前端开发
javascript知识点
javascript知识点
下一篇
无影云桌面