首页 > 编程语言 >从零开始学node.js笔记 02

从零开始学node.js笔记 02

时间:2022-12-31 17:01:33浏览次数:40  
标签:node 02 http req js 模块 服务器 server const

一、node.js中http模块

http模块是Node.js官方提供的、用来创建web服务器的模块。通过http模块提供的http.createServer()方法,

就能方便的把一台普通的电脑变成一台Web服务器,从而对外提供Web资源服务。

如果希望使用http模块创建Web服务器,则需要先导入:

const http = require('http')

服务器和普通电脑的区别在于,服务器上安装了web服务器软件,通过服务器软件,将一台普通电脑变成一台web服务器。

在node.js中,我们不需要使用web服务器软件。因为我们可以基于node.js提供的http模块,通过代码对外提供web服务。


服务器相关概念:

1.ip地址:

ip地址就是互联网上每台计算机的唯一地址,因此ip地址具有唯一性。只有在知道对方ip地址的前提下才能与对应的电脑之间进行数据通信。

ip地址的格式:通常使用“点分十进制”表示成(a,b,c,d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。

注意:

互联网中每台Web服务器,都有自己的ip地址。

在开发期间,自己的电脑既是一台服务器,也是一个客户端。


2.域名和域名服务器:

ip地址不够直观且不方便记忆,于是人们发明了另一套字符型的地址方案,即所谓的域名地址。

ip地址和域名是一一对应的关系,这份对应关系存放在一个叫做域名服务器的电脑中,使用者只需要通过域名访问对应的服务器即可,对应的转换工作有域名服务器实现。因此,域名服务器就是通过ip地址和域名之前转换服务的服务器。


3.端口号:

在一台电脑中,可以运行成百上千个web服务,每个web服务都对应一个唯一的端口号,客户端发送过来的网络请求,通过端口号,可以被准确地交给对应的web服务进行处理。

注意:

每个端口号不能同时被多个web服务占用。

在世纪应用中url中的80端口可以被省略。




创建web服务器:

步骤一  导入http模块:

const http = require('http')

步骤二  创建web服务器实例:

调用http.createServer()方法

const server = http.createServer()

步骤三  为服务器绑定request事件:

server.on('request',(req,res) => {

})

步骤四  启动服务器:

调用服务器实例的server.listen()方法

//server.listen(端口号,回调)
server.listen(80,()=>{

})



req请求对象:

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数。

如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下方式:

const http = require('http')
const server = http.createServer()
// req 是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req) => {
// req.url 是客户端请求的 URL 地址
const url = req.url
// req.method 是客户端请求的类型
const method = req.method
const str = `请求url: ${url}, 请求方式: ${method}`
console.log(str)
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1')
})



res响应对象:

在服务器的request事件处理函数中,访问与客户端相关的数据或属性,可以使用如下方式:

const http = require('http')
const server = http.createServer()
// req 是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req, res) => {
// req.url 是客户端请求的 URL 地址
const url = req.url
// req.method 是客户端请求的类型
const method = req.method
const str = `请求url: ${url}, 请求方式: ${method}`
console.log(str)
// 调用 res.end() 方法,向客户端响应一些内容
res.end(str)
})
server.listen(8080, () => {
console.log('server running at http://127.0.0.1')
})

解决中文乱码:

添加一个响应头以解决乱码问题

// 调用 res.setHeader() 方法,设置 Content-Type 响应头,解决中文乱码的问题
res.setHeader('Content-Type', 'text/html; charset=utf-8')



二、模块化

1.模块化的基本概念

模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。

编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并相互依赖的多个小模块。

把代码进行模块化拆分的好处:

提高代码的复用性

提高代码的可维护性

可以实现按需加载


模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的规则。

模块化规范的好处:降低沟通成本,极大地方便了个模块之间的互相调用。



2、node.js中模块的分类

node.js中根据模块来源不同,将模块分为三大类:

内置模块(官方提供的)

自定义模块(用户创建的每个js文件都是自定义模块)

第三方模块 (由第三方开发的,使用时需要下载)



3、模块作用域

和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域。

模块作用域能够防止全局变量污染问题

在每个自定义模块当中,都有过一个module对象,它里面存储了和当前模块有关的信息。


module.exports对象

在自定义模块中,可以使用module.exports对象,模块内的成员共享出去,弓外界使用

外界使用require方法导入自定义模块时,得到的是module.exports所指向的对象

使用require方法导入模块时,导入的结果,永远以module.export指向的对象为准


exports对象

由于module.exports单词写起来比较复杂,为了简化向外共享成员代码,node还提供exports对象。

默认情况下exports和module.exports指向同一个对象。最终共享结果,还是以module.exports指向的对象为准。




三、npm与包

1、什么是包

node.js中第三方模块又叫做包


2、包的来源

不同于node.js中的内置模块与自定义模块,包是第三方个人或团队开发的,免费供所有人使用。



3、

标签:node,02,http,req,js,模块,服务器,server,const
From: https://blog.51cto.com/u_15548632/5982158

相关文章

  • Good Bye 2022: 2023 is NEAR D
    D.KoxiaandGametilian很容易发现就是我们要让每个数字都doublechoice一次才能得到答案比如第一个样例我们发现11已经doublechoice一次过了所以我们该点可以搞......
  • 算法刷题 Day 4 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.0
    24.两两交换链表中的节点用虚拟头结点,这样会方便很多。Tips:注意先把边界条件排除,然后注意可能会出现null的情况。我的题解:/***Definitionforsingly-linked......
  • 2022年终总结
    时光飞逝,转眼间,今天已是2022年的最后一天了。没想打最后一天我是在病痛中度过的。昨天从上海出差回来,浑身乏力,胸闷。今天起来胸闷好了点,但四肢乏力的状况没有一点好转。我......
  • 我的2022年终总结
    前言2022年即将过去,回顾这一年,疫情影响到工作和生活,但总体以稳定为主,12月全面放开后,慢慢恢复三年前的生活。工作篇关于工作内容本年的工作总体压力适中,侧重在用户行为分析......
  • Allure02-测试集特性、模块特性与功能特性
    allure的特性allure支持pytest自带的特性fixture、parametrize、xfail、skipallure提供了很多特性(装饰器)allure可以将这些特性信息写入到测试报告中@allure.su......
  • [年终总结]2022
    感觉22年过得挺快的一眨眼就过去了。总结一下一年里的事情吧。技术上感觉没学多少感觉今年几乎就是按照智能车展开的,先是年初深入了解了一下RTOS,之后就是智能车的图像,主......
  • Good Bye 2022: 2023 is NEAR
    KoxiaandNumberTheory(鸽巢原理)题目大意给定一个长度为\(n(2\len\le100)\)的数组\((1\lea[i]\le10^{18})\),问是否存在一个正整数x,使得对于任意的i,j都满足\(gc......
  • Illustrator 2022 for mac (AI 2022) v26.4.1中文版
    Illustrator 2022中文版是一款矢量图形软件,Adobeillustrator常被称为“AI”,可以制作适用于印刷、Web、视频和移动设备的徽标、图标、绘图、版式和插图的矢量图设计软件。......
  • 蓝桥杯2021
    空间小蓝准备用256MB的内存空间开一个数组,数组的每个元素都是32位二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问256MB的空间可以存储多少个32......
  • visual studio code设置setting.json文件
    #原始设置{"editor.unicodeHighlight.nonBasicASCII":false,"editor.unicodeHighlight.ambiguousCharacters":false,"workbench.preferredDarkColorTh......