Node.js与内置模块

Node.js

1.JavaScript组成:核心js语法和WebAPI
2.浏览器中的JavaScript运行环境
(1)运行环境:代码正常运行所需的环境
3.Node.js:JavaScript的运行环境

1. 浏览器是JavaScript的前端运行环境
2.Node.js是JavaScript的后端运行环境
3.Node.js无法调用DOM和BOM等浏览器内置的API

3.Node.js的环境安装:打开官网,下载所需的版本,双击安装即可
(1)LTS版本:长期稳定版,
(2)Current:尝新版本
4.查看已安装的Node.js的版本号: node -v
5. 终端:用于人机交互的一种方式
6.在Node.js中执行javascript的代码:定位到要打开文件的目录页,然后按住Shift键,点击鼠标的右键,并选择在此处打开PowerShell即可 在终端窗口中输入node 文件名称 即可打开js文件
7.终端快捷键

  • 上箭头:方向键中的上箭头:快速定位到上一次执行的命令
  • 使用tab键,能够快速补全路径【只需要写出第一个字母】
  • esc键能够快速清空当前已输入的命令
  • 输入cls可以清空中断中的内容

fs文件系统模块

1.fs模块:用来操作文件的模块,提供了一系列的方法和属性,用来满足用户对问价操作的需求使用时一定要先导入模块
语法格式:const fs=require('fs')
2.fs中读取文件中的内容:fs.readFile()
语法格式:fs.readFile(path[options],callback)
path:字符串,必选,表示文件的路径
options:可选参数,表示以什么编码格式来读取文件
callback:必选函数 文件读取完成后,通过回调函数拿到读取的结果
实例:

// 引入fs模块
const fs=require('fs')
fs.readFile('./files/春.txt','utf8',function(err,datastr){
    console.log(err);
    console.log('-----------------------');
    console.log(datastr);
})

如果读取文件失败==则err的值为 错误对象 datastr的值为undefined
文件读取成功 err的值为null

2.判断文件的值是否读取成功

// 引入fs模块
const fs=require('fs')
fs.readFile('./files/春.txt','utf8',function(err,datastr){
    if(err){
   
    return  console.log('读取文件失败'+err);
       
    }
    else{
        return  console.log('读取文章成功'+datastr);
    }

3.向指定的文件中写入内容
语法格式:fs.writeFile(file,data[,options],callback)
参数:file: 必须按参数 文件的存放路径
data:必须按参数 表示要写入的文件
options:可选参数 表示以什么样的格式写入文件
callback:必选参数 文件写入以后的回调函数
【文件写入成功是err的值为null】

const fs=require('fs')
fs.writeFile('./files/02火烧云.txt','火烧云',function(err){
    if(err){
        console.log('文件写入失败'+err);
    }
    else{
        console.log('文件写入成功');
    }
})

路径拼接问题:
解决相对路径的问题:完整路径【移植性差】
__dirname:表示当前文件所处的目录

path路径模块:用来处理路径的模块

1. 路径拼接:path.join()语法格式
语法规范 :path.join([…paths])
paths:字符串类型表示路径片段的序列
返回值:返回值是拼接好的string类型

const path=require('path')
var path1=path.join('/a','/b','//c')
console.log(path1);
var path2=path.join(__dirname+'/files/整理成绩ok.txt')
console.log(path2);

2.获取路径中的文件名
path.basename():获取路径中的最后一部分,通常通过这个方法获取路径中的文件名
语法格式:path.basename(path,[ext])
path:字符串 必选参数,表示一个路径的字符串
ext:可选参数,表示文件的扩展名

const path=require('path')
var path1=path.join('/a','/b','//c','index.html')
var base1=path.basename(path1)
console.log(base1);

参数ext是除去文件的扩展名
3.获取文件中的文件扩展名
path.extname(path)
path:表示路径的字符串
返回值为字符串类型,是得到的扩展名字符串

将HTML文件中得代码提取出来变成css文件,script文件等

  • 创建两个正则表达式,分别用来匹配
// 引入模块
const fs=require('fs')
const path=require('path')
// 创建正则表达式
const regStyle=/<style>[\s\S]*<\/style>/
const regScript=/<script>[\s\S]*<\/script>/
// 读取index.html文件
fs.readFile(path.join(__dirname,'./时钟案例/index.html'),'utf8',function(err,datastr){
    if(err){
        console.log('文件读取失败');
    }
    else{
        console.log('文件读取成功');
        // resolveStyle(datastr)
        // resolveScript(datastr)
        resolveHtml(datastr)
    }
})
// 定义方法抽取文件
function resolveScript(scriptstr){
    // 匹配正则表达式
    var reg=regScript.exec(scriptstr)
    // 将匹配好的内容中的标签替换成空格
    var newScript=reg[0].replace('<script>','').replace('</script>','')
    console.log(newScript);
    // 将提取出来的内容写入到所对应的文件中去
    fs.writeFile(path.join(__dirname,'./时钟案例/index.js'),newScript,function(err){
        if(err){
            console.log('文件写入失败');
        }
        else{
            console.log('文件写入成功');
        }
    })
}

function resolveStyle(stylestr){
    var reg=regStyle.exec(stylestr)
    var newStyle=reg[0].replace('<style>','').replace('</style>','')
    console.log(newStyle);
    fs.writeFile(path.join(__dirname,'./时钟案例/index.css'),newStyle,function(err){
        if(err){
            console.log('文件写入失败');
        }
        else{
            console.log('文件写入成功');
        }
    })
}

function resolveHtml(htmlstr){
    // 将上面的正则表达式替换为引入连接的文件
    const newHtml=htmlstr.replace(regScript,'<script src="./index.js"></script>')
    .replace(regStyle,'<link rel="stylesheet" href="./index.css">')
    fs.writeFile(path.join(__dirname,'./时钟案例/index.html'),newHtml,function(err){
        if(err){
            console.log('文件写入失败');
        }
        else{
            console.log('文件写入成功');
        }
    })
}

http模块

1.http模块是Node.js官网提供的,用来创建web服务器的模块
2.IP地址:每台计算机的唯一地址
格式:“点分十进制”【a.b.c.d】其中a b c d都是0~255之间的十进制数
可以在windows的终端中运行ping www.baidu.com 就可以查看到百度服务器的IP地址
3.域名 域名服务器:IP地址和域名是一一对应的问题,这种对应关系存放在域名服务器中【域名服务器就是提供IP地址和域名之间转换服务的服务器】
4.端口号:每个端口号不能同时被多个Web服务器占用;在实际应用中,URL中的80端口号可以被省略

创建最基本的web服务器

1.步骤

  • 导入http模块
  • 创建web服务器实例、【http.createSever()】
  • 为服务器实例绑定request事件,金婷客户端的请求
  • 启动服务器.listen(端口号,回调函数)
// 导入http模块
const http=require('http')
// 创建服务器实例
var server=http.createServer()
// 给服务器绑定requet事件
server.on('request',function(req,res){
    console.log('someone vist ');
})
// 启动服务器
server.listen(8080,function(){
    console.log('server is running');
})

2.req请求对象:只要服务器接收到了客户端的请求,就会调研server.on()为服务器绑定的request事件处理函数。【包含了客户端相关的数据和属性】

  • req.url():客户端请求的URL地址
  • req.method():客户端请求的method类型
const http=require('http')
var server=http.createServer()
server.on('request',function(req){
    const url=req.url
    const method=req.method
    const str='your request url is ${url}, and method is ${method}'
    console.log(str);
})
server.listen(80,function(){
    console.log('服务器已经启动');
})
```**3.res的响应对象**:访问与服务器相关的数据或者属性
可以调用res.end()方法,向客户端响应一些内容

```javascript
const http=require('http')
const server=http.createServer()
server.on('request',function(req,res){
    const url=req.url
    const method=req.method
    const str='Your request url is'+url+' and your request method is '+method
    console.log(str);
    res.end(str)
})
server.listen(8080,function(){
    console.log('服务器已经启动');
})

3.解决中文乱码:使用res.end()方法向客户端发送中文内容时,有可能出现乱码现象。此时,需要手动设置内容的编码格式
解决方法:设置响应头 Content-Type的值为text/html charset=utf-8【调用res,setHeader】

    res.setHeader('Content-Type', 'text/html; charset=utf-8')

4.根据不同的URL响应不同的HTMl内容
步骤:

  1. 获取请求的URL地址
  2. 设置默认的响应内容为404 Not Found
  3. 判断用户的请求是否为/ 或 /index.html首页
  4. 判断用户请求是否为/about.html关于页面
  5. 设置请求头,防止中文乱码
  6. 使用res.end将内容响应给客户端
const http=require('http')
const server=http.createServer()
server.on('request',function(req,res){
    const url=req.url
    const method=req.method
   let content='<h1>404 Not Found</h1>'
    // const str='您的请求地址是'+url+' 您的请求方式是 '+method;
    // res.setHeader('Content-Type', 'text/html; charset=utf-8')
    // console.log(str);
    // res.end(str)
    if(url==='/'||url==='/index.html'){
        // 用户请求的是首页应该将内容更改为首页的内容
      content='<h1>首页页面</h1>'

    }
    else if(url==='/about.html'){
        content='<h1>关于页面</h1>'
    }
    res.setHeader('Content-Type', 'text/html; charset=utf-8')
    res.end(content)
})
server.listen(8080,function(){
    console.log('服务器已经启动');
})

模块化

定义:解决一个复杂问题时,自顶向下逐层把系统划分为若干模块的过程。【模块解释可组合,可分解和可更换的单元】
1.好处

  • 提高了代码的复用性
  • 提高了代码的可维护性
  • 可以实现按需加载

2.Node.js模块的三大分类

  1. 内置模块(由Node.js提供。例如 fs path http等)
  2. 自定义模块:用户创建的每个js文件
  3. 第三方模块:有第三方卡发出来的模块 使用前需要下载
    模块的加载:使用require()方法,客家仔需要的内置模块,用户自定义模块和第三方模块
    使用require加载其他模块式,同样会加载引入模块中的代码
    注意:在使用require方法加载用户自定义模块时,可以省略.js的后缀名

测试代码:

const m1=require('./14自定义模块')
console.log(m1);

Node.js的模块作用域
1.模块作用域:在自定义模块中定义的变量,方法等成员,只能在当前模块被访问
测试代码
m2.js文件

const username='张三'
function sayhi(){
    console.log('我是m2中的的方法');
}

m1.js

const m1=require('./2m2')
console.log(m1);

mi访问不m2中的属性和方法,只能输出一个空对象
模块作用域的好处:防止全局变量污染
向外共享模块作用域中的成员
1.module对象:存储了与当前模块有关的信息

  • module.exports对象:将木块内的成员共享出去,供外界使用【我们使用require方法导入时,导入的就是module.exports指向的对象】
    在一个自定义模块中,默认情况下,module.exports={}
我们想向外界共享的username为张三的属性
module.exports.username='张三'
module.exports.sayhi=function(){
    console.log('你好');
}

注意点:
(1)使用require()方法导入模块时,导入的结果,永远以module.exports指向的对象为准

2.CommonJS
1.Nod.js遵循了CommonJS模块化,CommonJS规定了模块的特性和各模块之间如何相互依赖
2.CommonJS规定:
(1)每个模块内部,module变量代表当前的模块
(2)module变量是一个对象,它的exports属性(module.exports)是对外的接口【向外共享成员】
(3)加载某个模块,其实是加载该模块的module.exports属性,require()方法用于加载模块
3.npm管理包
4.规范的包结构
5.模块的加载机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值