Node.js 基础学习
Node.js是基于Chrome V8引擎的JavaScript运行环境。
官网:https://nodejs.org/zh-cn/
浏览器为前端运行环境,Node.js为后端运行环境,无法调用DOM和BOM等浏览器内置API。
Node.js的作用:
1)基于Express框架(https://www.expressjs.com.cn/),快速构建Web应用
- 2)基于Electron框架(https://electron.org/),构建跨平台桌面应用
- 3)基于restify框架(https://restify.com/),快速构建API接口项目
- 4)读写和操作数据库、创建实用的命令行工具辅助前端开发
Node.js指令
查看版本号:node -v
执行JavaScript代码:node 执行的js文件的路径
fs文件系统模块
fs模块:操作文件的模块,提供一系列的方法和属性,满足用户对文件的操作需求。
导入:
const fs = require('fs')
1)、fs模块-fs.readFile()
fs.readFile():读取指定文件中的内容
//path:必选参数,字符串,表示文件的路径;options,可选参数,表示以什么编码格式来读取文件;callback,必选参数,文件读取完成好,通过回调函数拿到读取的结果
fs.readFile(path[, options], callback)
示例:
fs.readFile('./file/1.txt','utf8', function(err,dataStr){
//打印失败的结果:1)读取成功,err的值为null。2)读取失败,err的值为错误对象,dataStr的值为underfined。
console.log(err)
console.los(dataStr)
})
2)、fs文件系统模块-fs.writeFile()
fs.writeFile():指定文件中写入内容
语法:
//path:必选参数,制定一个文件路径的字符串,表示文件的存放路径;data:必选参数,写入的内容;options,可选参数,表示以什么编码格式来写入文件内容,默认值为utf8;callback,必选参数,文件写入完成后的回调函数
fs.readFile(path,data[, options], callback)
示例
fs.writeFile('./file/2.txt','asd',function(err){
//文件写入成功,err的值等于null;文件写入失败,err的值等于一个错误对象
console.log(err)
})
3)、fs模块-路径动态拼接的问题
提供操作路径是以./或…/开头的相对路径,很容易出现路径动态拼接的问题
原因:代码在运行的时候,会以执行node命令时所处的目录,动态拼接出操作文件的完整路径
解决方法:
1)使用绝对路径,但移植性非常差,不利于维护
2)__dirname:表示当前文件所处的目录,使用方法:与相对路径进行拼接(使用path.join()进行拼接)
path路径模块
用于处理路径的模块,提供一系列的方法和属性,用来满足用户对路径的处理需求。
导入:
const path = require('path')
方法:
path.join():
path.basename():用来从路径字符串中,将文件名解析出来
1)、path路径模块-路径拼接
path.join():用来将多个路径片段拼接成一个完整的路径字符串
语法:
//返回值:路径的字符串<string>
path.join([...paths])
../:可抵消前一层路径,./不能抵消路径
path路径模块-获取路径的文件名
path.basename():可以获取路径中的最后一部分,获取路径中的文件名
语法
//path<string>:必选参数,表示一个路径的字符串;ext<string>可选参数,表示文件扩展名;返回值:<string>表示路径中的最后一部分
path.basename(path[,ext])
path路径模块-获取路径的文件扩展名
path.extname():可以获取路径中的最后一部分,获取路径中的文件名
语法
//path<string>:必选参数,表示一个路径的字符串;返回值:<string>表示得到的扩展名字符串
path.extname(path)
http模块
客户端:负责消费资源的电脑
服务器:负责对外提供网络资源的电脑
http:用来创建web服务器的模块,通过http.createServer()方法,就能把一台普通的电脑,变成一台>Web服务器,从而向外提供Web资源服务。
导入
const http =require('http')
http模块-http模块的作用
服务器和普通电脑的区别:服务器上安装了web服务器软件,例如IIS、Apache。
使用http模块中,通过几行简单的代码,就手写一个服务器软件,不需要使用第三方web服务器软件。
http模块-服务器相关概念
IP地址:
每台计算机的唯一地址,具有唯一性。格式:通常“点分十进制”,表示成(a.b.c.d)的形式,a,b,c,d都是0~255之间的十进制。每台web服务器,都有自己的IP地址。开发期间,做自己的电脑即是服务器,也是客户端。
域名和域名服务器:
域名是IP的别名,与IP地址是一一对应关系,对应关系存放在一种叫做域名服务器(DNS)的电脑中。域名服务器是提供IP地址和域名之间转换服务的服务器。开发测试期间,127.0.01对应域名是localhost。
端口号:
每个web服务都对应一个唯一的端口号。客户端发送来的网络请求,通过端口号,可以被准确地交给对应的web服务器进行处理。1)每个端口号不能同时被多个web服务占用。2)在实际应用中,URL的80端口可以被省略。
http模块-创建最基本的web服务器
创建web服务器的基本步骤
1)导入http模块
2)创建web服务器实例,调用createServer()
3)为服务器实例绑定request事件,监听客户端的请求
//只要服务器接收到客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数。
//req请求对象:包含了与客户端相关的数据和属性。req.url是客户端请求的URL地址;req.method是客户端请求的method。
//res响应消息,调用res.end(),向客户端发送指定的内容,并结束这次请求的处理过程。
server.on('request',function(req,res){
req.url
req.method
})
4)启动服务器,调用.listen(端口号,cb回调方法)
505错误:端口号被占用
解决中文乱码问题:手动设置内容的编码格式,设置Content-Type响应头。
res.setHeader('Content-Type','text/html;charset=utf-8')
http模块-根据不同的url响应不同的html内容
核心实现步骤
1)获取请求的url地址。
2)设置默认的响应内容为404 Not found。
3)判断用户请求的是否为/或/index.html首页。
4)判断用户请求的是否为/about.html关于页面。
5)设置Content-Type响应头,防止中文乱码。
6)使用res.end()把内容响应给客户端。
模块化
模块化是指解决一个复杂问题时,自顶向下层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。
编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。
1)提高了代码的复用性
2)提高代码的可维护性
3)可以实现按需加载
模块化-模块化规范
模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的那些规则。
好处:降低沟通成本,方便各个模块之间的相互调用
Node.js遵循CommonJS模块化规范。CommonJS规定了模块的特性和各模块之间如何相互依赖。
CommonJS 规定:
1)每个模块内部,module变量代表当前模块
2)module变量是一个对象,它的exports属性(module.exports)是对外的借口
3)加载某个模块,其实是加载该模块的module.exports属性。require()方法用于加载模块。
模块化-模块
分类(3):内置模块(官方提供),自定义模块(用户创建),第三方模块(需要下载)
加载模块:
//加载内置的fs模块
const fs = require('fs')
//加载用户自定义模块,可以省略.js后缀名
const custom = require('./custom.js')
//加载第三方模块
const moment = require('moment')
使用require()方法加载其他模块时,会执行加载模块中的代码