Node.js

浏览器是JavaScript的前端运行坏境

node.js是JavaScript的后端运行环境

node.js中无法调用DOM和BOM等浏览器内置API

fs文件系统模块

fs模块是node.js官方提供的,用来操作文件的模块。提供了一系列的方法和属性,用来满足用于对文件的操作需求

fs.readFile()方法,用来读取指定文件中的内容
fs.writeFile()方法,用来向指定的文件中写入内容

如果要在Javascript代码中,使用fs模块来操作文件,则需要使用如下的方式先导入它:

const fs=require("fs")//fs模块化

 读取指定文件中的内容

fs.readFile(path[,options],callback)
  path 必选参数,字符串,表示文件的路径
  options  可选参数,表示以什么编码格式来读取文件
  callback  必选参数,文件读取完成以后,通过回调函数拿到读取的结果
//导入fs模块
const fs=require("fs");
//调用fs.readFile()方法读取文件
//参数1:读取文件的存放路径
//参数2:读取文件时候采用的编码格式,一般默认指定  utf8
//参数3:回调函数,拿到读取失效和成功的结果  err和dataStr
fs.readFile("./file.txt","utf8",function(err,dataStr){
//打印失败的结果
//如果读取成功,err的值为null
//如果读取失败,err的值为  错误对象,dataStr的值为undefined
console.log(err);
//打印成功的结果
console.log(dataStr);
})

判断文件是否读取成功

可以判断err对象是否为null,从而知晓文件读取的结果:

const fs=require("fs");
fs.readFile("./file.txt","utf8",function(err,dataStr){
if(err){
 return console.log("读取文件失败"+err.massage);
}
console.log('读取文件成功'+dataStr);
})

向指定的文件中写入内容

注意:
①fs.writeFile()方法只能用来创建文件夹,不能用来创建路径
②重复调用fs.writeFile()写入同一个文件,新写的内容会覆盖之前的旧内容

fs.writeFile(file,data[,options],callback)

file   必选参数,需要指定一个文件路径的字符串,表示文件的存放路径

data  必选参数,表示要写入的内容

options 可选参数,表示以什么格式写入文件内容,默认值是utf8

Callback 必选参数,文件写入完成后的回调函数



向指定的文件路径中,写入文件内容

//导入fs模块
const fs=require("fs");
//写入文件的内容
fs.writeFile('./1.txt','abc','utf8',function(err,dataStr){
//参数1:表示文件的存放路径
//参数2:表示写入的内容
//参数3:回调函数
//如果文件写入成功,则 err的值等于null
//如果文件写入失败,则 err的值等于一个   错误对象
console.log(err);
})

判断文件是否写入成功

   可以判读err对象是否为null,从而知晓文件写入的结果

//导入fs模块,来操作文件
const fs=require("fs");
fs.writeFile("./1.txt",'abc',function(err){
if(err){
   return console.log("文件写入失败!"+err.message);
}
console.log("文件写入成功");
})

fs模块-路径动态拼接的问题

在使用fs模块操作文件时,如果提供的操作路径是以  ./  或  ../开头的相对路径时,很容易出现路径动态拼接错误的问题

原因:代码在运行的时候,会以执行node命令时所处的目录,动态拼接出被操作文件的完整路径

解决方案: 在使用fs模块操作文件时,直接提供完整的路径,不需要提供  ./  或  ../开头的相对路径,从而防止路径动态拼接的问题

//dirname表示当前文件所处的目录
fs.readFile(__dirname+"/files/1.txt","uft8",function(err,dataStr){
  if(err){
return console.log("读取文件失败"+err.massage);
}
console.log("读取文件成功")
})

__dirname   表示当前文件所处的目录

path  路径模块

    path路径模块是Node.js官方提供的,用来处理路径的模块,它提供了一系列的方法和属性,用来满足用户对路径的处理需求

path.join()方法,用来将多个路径片段拼接成一个完整的路径字符串
path.basename()方法,用来从路径字符串中,将文件名解析出来

如果要在javascript代码中,使用path模块来处理路径,则需要使用如下的方式先导入它:

//导入path模块
const path=require("path");
path.join()的语法格式
   使用path.join()方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下
      path.join([...paths])
      参数:...paths<string>路径片段的序列
      返回值:<string>


//导入path模块
const path=require("path");
//注意  ../  会抵消前面的路径
 const pathStr=path.join('a','/b/c','../','./d','e');
console.log(pathStr);//输出\a\b\d\e

注意:今后凡是涉及到路径拼接的操作,都要使用path.join()方法进行处理,不要直接使用+进行字符串的拼接

//导入path模块
const path=require("path");
fs.readFile(path.join(__dirname,"file/1.txt"),"utf8",function(err,dataStr){
if(err){
  return console.log(err.message);
}
console.log(dataStr);
})

获取路径中的文件名

  path.basename()的语法格式

        使用path.basename()方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名,语法格式如下:

path.basename(path,[,ext])

  path<string>  必选参数,表示一个路径的字符串

  ext<string>   可选参数,表示文件的扩展名

   返回<string>表示路径中的最后一部分

使用path.basename()方法,可以从一个文件路径中,获取到文件的名称部分

const path=require("path");
//定义文件的存放路径
const fpath='/a/b/c/index.html';
const fullName=path.basename(fpath);
console.log(fullName);//index.html


const fullName=path.basename(fpath,'.html');
console.log(fullName);//index

获取路径中的文件扩展名

  path.extname() 的语法格式

  使用path.extname()方法,可以获取路径中的扩展名部分,语法格式如下:

path.extname(path)

path<string>  必须参数,表示一个路径的字符串

返回值:<string>返回得到的扩展名字符串

使用path.extname()方法,可以获取路径中的扩展名部分:

const path=require("path");
//定义一个文件的存放路径
const fpath="/a/b/c/index.html";
const ext=path.extname(fpath);
console.log(ext);//输出  .html

http模块

什么是http模块

什么是客户端

   在网络节点中,负责消费电脑资源的电脑,叫做客户端

   负责对外提供网络资源的电脑,叫做服务器

http模块是Node.js官方提供的、用来创建web服务器的模块。通过http模块的http.createServer()方法,就能方便地把一台普通地电脑,变成web服务器,从而对外提供web资源服务。

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

const http = require("http");

我们可以通过基于Node.js提供的http模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供web服务

服务器的相关概念

1.IP地址

    IP地址就是互联网上每台计算机的唯一地址,因此IP地址具有唯一性。如果把"个人电脑"比作"一台电话",那么"IP地址"就相当于"电话号码",只有在知道对方IP地址的前提下,才能与对应的电脑之间进行数据通信

IP地址的格式:通常用"点分十进制"表示成(a.b.c.d)的形式,a,b,c,d都是0~255之间的十进制整数。例如:用点分十进制表示的IP地址(192.168.1.1)。

      ①互联网中每台web服务器,都有自己的IP地址,例如:大家可以在windows的终端中运行 ping www.baidu.com 命令,即可查看到百度服务器的IP地址。

      ②在开发期间,自己的电脑既是一台服务器,也是一个客户端,为了方便测试,可以在自己的浏览器中输入127.0.0.1这个IP地址,就能把自己的电脑当作一台服务器进行访问了

2.域名或域名服务器

  尽管IP地址能够唯一的标记网络上的计算机,但IP地址是一长串数字,不直观,而且不便于记忆,于是人们又发明了另一套字符型的地址方案,即所有的域名(Domain Name)地址

 IP地址和域名是一一对应的关系,这份对应关系存放在一种叫做域名服务器(DNS,Domain name server)的电脑中,使用者只需要通过好记得域名访问对应的服务器即可,对应的转换工作由域名服务器实现。因此,域名服务器就是提供IP地址和域名之间的转换服务的服务器。

注意:

   ①单纯使用IP地址,互联网中的电脑也能够正常工作,但是有了域名的加持,能让互联网的世界变得更加方便

  ②在开发测试期间,127.0.0.1对应的域名是 localhost,他们都是代表我们自己的这台电脑,在使用效果上没有任何区别。

端口号:

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

创建web服务的基本步骤

①导入http模块

const http = require("http");

②创建web服务器实例

   通过http.createServer()方法,即可快速创建一个web服务器

const server = http.createServer();

③为服务器实例绑定request事件,监听客户端的请求

.on 方法为服务器绑定一个  request 事件

server.on("request",(req,res)=>{
//只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用这个事件处理函数
console.log("Someone visit oue web server")
})

④启动服务器

调用服务器实例的.listen()方法,即可启动当前的web服务器实例

   调用server.listen(端口号,cd回调)方法,即可启动web服务器

server.listen(80,()=>{
console.log(“http server running at http://127.0.0.1”)
})
// 导入http模块
const http = require("http");
// 创建web服务器实例
const server = http.createServer();
// 为服务器实例绑定  request事件,监听客户端的请求
server.on("request", function (req, res) {
    console.log("Some visit our web server")
})
// 启动服务器
server.listen(8055, function () {
    console.log("server running at http://127.0.0.1:8055");
})

req请求对象

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

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

server.on(‘request’,(req)=>{
//req是请求对象,它包含了与客户端相关的数据和属性,如下
//req.url   是客户端请求的URL地址
//req.method  是客户端的method请求类型
const str=”Your request url is ${req.url} ,and request method is ${req.method}”
consle.log(str)
})
const http=require("http");
const server=http.createServer();
//req  是请求对象,包含了与客户端相关的数据和属性
server.on("request",(req)=>{
//    req.url 是客户端请求的  URL 地址
const url=req.url;
//    req.method  是客户端请求的  method  类型
    const method =req.method;
    const str= `your request url is ${url},and request method is ${method}`;
    console.log(str)
})
server.listen(80,()=>{
    console.log("server running at http://127.0.0.1")
})

res响应对象

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

server.on(“request”,(req,res)=>{
//res 是响应对象,它包含了与服务器相关的数据和属性,例如:要发送到客户端的字符串
const str =`Your request url is ${req.url},and request method is ${req.methos}`
//res.end()方法的作用
//向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str)
})
const http=require("http");
const server=http.createServer();
server.on("request",(req,res)=>{
    //req.url 是客户端请求的url
    const url=req.url;
    // req.method  是客户端请求的method
    const method=req.method;
    const str=`Your request url is ${url},and request method is ${method}`;
    console.log(str);
//    调用  res.end() 方法,向客户端响应一些内容
    res.end(str)
})
server.listen(80,()=>{
    console.log("server running at http://127.0.0.1")
})

解决中文乱码问题

  当调用  res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要动手设置内容的编码格式:

server.on(“request”,(req,res)=>{
//发送内容包含中文
const str =”你请求的url地址 是${req.url},请求的method类型是${req.method}”
//为了防止中文显示乱码的问题,需要设置响应头  Content-Type的值为 text/html:charset=utf-8
res.setHeader(‘Content-Type’,’text/html;charset=utf-8’)
//把包含中文的内容,响应给客户端
res.end(str)
})
// 导入http模块
const http = require("http");
//创建web服务器实例
const server = http.createServer();
// 为服务器实例绑定request事件,监听客户端的请求
server.on("request", (req, res) => {
    // req.url   是客户端请求的URL地址
    const url = req.url;
    // req.method  是客户端的method请求类型
    const method = req.method;
    //发送的内容包含中文
    const str = `你请求的url地址是${url},请求的method类型是 ${method}`;
    console.log(str);
    // 为了防止中文显示乱码的问题,需要设置响应头 Content-Type 的值为text/html:charset=utf-8
    res.setHeader("Content-Type","text/html; charset=utf-8")
//    res.end()方法的作用
// 向客户端发送指定的内容,并结束这次请求的处理过程
//    把包含中文的内容,响应给客户端
    res.end(str)
})
// 启动服务器
server.listen(80, () => {
    console.log("server running at http://127.0.0.1")
})

根据不同的 url 响应不同的 html 内容

核心实现步骤

  1. 获取请求的 url 地址
  2. 设置默认的响应内容为 404 Not found
  3. 判断用户请求的是否为 / 或 /index.html 首页
  4. 判断用户请求的是否为 /about.html 关于页面
  5. 设置 Content-Type 响应头,防止中文乱码
  6. 使用 res.end() 把内容响应给客户端
  7. const http = require("http");
    const server = http.createServer();
    server.on("request", (req, res) => {
        // ①获取请求url地址
        const url = req.url;
    // ②设置默认的响应内容为404 Not found
        let content = "<h1>404 Not found!!!</h1>"
    // ③判断用户请求的是否为  /  或  /index.html首页
    // ④判断用户请求的是否为 /about.html关于页面
        if (url === '/' || url === '/index.html') {
            content = "<h1>首页</h1>"
        } else if (url === '/about.html') {
            content = "<h1>关于页面</h1>"
        }
        // ⑤设置Content-Type响应头,防止中文乱码
        res.setHeader("Content-Type", "text/html; charset=utf-8");
        // ⑥使用res.end()把内容响应给客户端
        res.end(content);
    })
    server.listen(80, function () {
        console.log('server running at http://127.0.0.1')
    })

模块化

模块化的基本概念

1.什么是模块化

模块化 是指解决一个 复杂问题 时,自顶向下逐层 把系统划分成若干模块的过程 。对于整个系统来说, 模块是可组合、分解和更换的单元
2. 编程领域中的模块化
编程领域中的模块化,就是 遵守固定的规则 ,把一个 大文件 拆成 独立并互相依赖 多个小模块
把代码进行模块化拆分的好处:
① 提高了代码的 复用性
② 提高了代码的 可维护性
③ 可以实现 按需加载
3.模块化规范
模块化规范 就是对代码进行模块化的拆分与组合时,需要遵守的那些规则。
例如:
使用什么样的语法格式来 引用模块
在模块中使用什么样的语法格式 向外暴露成员
模块化规范的好处 :大家都遵守同样的模块化规范写代码,降低了沟通的成本,极大方便了各个模块之间的相互调用, 利人利己。

Node.js 中的模块化 

Node.js 中模块的分类
Node.js 中根据模块来源的不同,将模块分为了 3 大类,分别是:
内置模块 (内置模块是由 Node.js 官方提供的,例如 fs、path、http 等)
自定义模块 (用户创建的每个 .js 文件,都是自定义模块)
第三方模块 由第三方开发出来的模块 ,并非官方提供的内置模块,也不是用户创建的自定义模块, 使用前需要先下载
加载 模块
使用强大的 require() 方法,可以加载需要的 内置模块 用户自定义模块 第三方模块 进行使用。例如:
//加载内置的fs模块
const fs = require("fs");
//加载用户自定义模块
 const custum = require("custum");
//加载第三方模块
const moment = require("moment");
 
注意 :使用 require() 方法加载其它模块时,会执行被加载模块中的代码。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值