一、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