Node.js日记(一)

目录

终端

环境变量(windows系统中变量)

进程和线程

Node.js

Node.js可以做什么

在Node.js环境中执行JavaScript代码

fs文件系统模块

path路径模块

http模块

模块化


终端:

终端是专门为开发人员设计的、用于实现人机交互的一种方式。一些常用命令:

dir

列出当前目录下的所有文件

cd 目录名

进入指定的目录

.表示当前目录

..表示上一级目录

cd..

跳转到上一级目录

md 目录名

创建文件夹

rd 目录名

删除文件夹

目录名

打开文件夹

X:

进入X盘

type 文件名

查看文件

type nul> 文件名

创建文件

del 文件名

删除文件

cls

清空终端

常用快捷键:

快速定位到(执行)上一次执行的命令

tab

快速补全路径

esc

快速清空当前已输入的命令

环境变量(windows系统中变量):

当我们在命令行窗口打开一个文件,或调用一个程序时,系统会首先在当前目录下寻找文件程序,如果找到了则直接打开,如果没有找到则会依次到环境变量path的路径中寻找,如果没找到则报错。所以我们可以将一些经常需要访问的程序和文件的路径添加到path中,这样我们就可以在任意位置来访问这些文件和程序了。

进程和线程:

进程负责为程序的运行提供必备的环境,相当于工厂的车间。

线程是计算机中最小的计算单位,线程负责执行进程中的程序,线程就相当于工厂的工人。JS是单线程,JAVA等语言是多线程。传统的服务器都是多线程的。Node的服务器是单线程的,Node处理请求时是单线程,但是在后台拥有一个I/O线程池。

Node.js:

Node.js是一个基于Chrome V8引擎的能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。浏览器是JavaScript的前端运行环境;Node.js是JavaScript的后端运行环境。Node中可以使用所有的内建对象(String、Number、Math、Function...),而DOM和BOM等浏览器内置API都不能调用,但是可以使用console和定时器。Node可以在后台来编写服务器,Node编写服务器都是单线程的服务器。Node是对ES(ECMAScript)标准的一个实现。

Node.js可以做什么:

1.基于Express框架快速构建Web应用

2.基于Electron框架构建跨平台的桌面应用

3.基于restify框架快速构建API接口项目

4.读写和操作数据库,创建实用的命令行工具辅助开发前端... ...

在Node.js环境中执行JavaScript代码:

打开终端-->输入:node 要执行的js文件的路径

fs文件系统模块:

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

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

const fs=require(‘fs’);

fs.readFile()方法用来读取指定文件中的内容:

// 格式:fs.readFile(path[,options],callback);
/*中括号内的是可选参数,不在中括号内的是必选参数。
  参数1:必选参数,字符串,表示文件的路径;
  参数2:可选参数,表示以什么编码格式来读取文件;
  参数3:必选参数,文件读取完成后通过回调函数拿到读取的结果。*/
//以utf8的编码格式,读取指定文件的内容,并打印err和dataStr的值
const fs=require('fs');
fs.readFile('1.txt','utf8',function(err,dataStr){
//如果读取成功,则err的值为null,读取失败则err值为错误对象,dataStr值为undefined
    console.log(err)
    console.log(dataStr)
})

判断文件是否读取成功:

const fs=require('fs');
fs.readFile('1.txt','utf8',function(err,dataStr){
    if(err){
        return console.log('读取失败'+err.message)
    }
    console.log('读取成功'+dataStr)
})

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

//fs.writeFile(file,data[,options],callback)
/*参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
  参数2:必选参数,表示要写入的内容
  参数3:可选参数,表示以什么格式写入文件内容,默认值是utf8
  参数4:必选参数,文件写入完成后的回调函数*/
const fs=require('fs');
fs.writeFile('1.txt','123456',function(err){
    console.log(err)
})

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

在使用fs模块操作文件时,如果提供的操作路径是以./或../开头的相对路径,很容易出现路径动态拼接错误的问题。原因是代码在运行的时候,会以执行node命令时所处的目录,动态拼接出被操作文件的完整路径。如果要解决这个问题,可以直接提供一个完整的文件存放路径,但移植性差且不利于维护。我们可以使用path.join()方法处理路径拼接的操作

path路径模块:

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

path.join()方法可以把多个路径片段拼接为完整的路径字符串:

//path.join([...paths])
/*参数:
  ...path<string>路径片段的序列
  返回值:<string>*/
const path=require('path')
const pathStr=path.join('/a','/b/c','../','./d','e')
//../会抵消一层路径
console.log(pathStr)//输出\a\b\d\e
//__dirname表示当前文件所处的目录
const pathStr2=path.join(__dirname+'./files/1.txt')
console.log(pathStr2)//输出 当前文件所处目录\files\1.txt

path.basename()可以获取路径中的最后一部分,我们常用这个方法获取路径中的文件名。

//path.basename(path[,ext])
/*参数:
  path<string>必选参数,表示一个路径的字符串
  ext<string>可选参数,表示文件扩展名
  返回值:<string>表示路径中的最后一部分*/
const path=require('path')
const fpath='/a/b/c/index.html'
var fullName=path.basename(fpath)
console.log(fullName)//输出index.html
var nameWithoutExt=path.basename(fpath,'.html')
console.log(nameWithoutExt)//输出index

path.extname()可以获取路径中的扩展名部分:

//path.extname(path)
/*参数:
  path<string>必选参数,表示一个路径的字符串
  返回值:<string>返回得到的扩展名字符串*/
const path=require('path')
const fpath='/a/b/c/index.html'
const fext=path.extname(fpath)
console.log(fext)//输出.html

http模块:

在网络节点中,负责消费资源的电脑叫做客户端;负责对外提供网络资源的电脑叫做服务器。http模块是Node.js官方提供的、用来创建web服务器的模块,通过http模块提供的http.createServer()方法,就能方便的把一台普通的电脑变成一台web服务器,从而对外提供web资源服务。

服务器和普通电脑的区别在于,服务器上安装了web服务器软件,例如:IIS、Apache等。通过安装这些服务软件,就能把一台普通的电脑变成一台web服务器。在Node.js中,我们不需要使用这些第三方web服务器软件。因为我们可以基于Node.js提供的http模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供web服务。在开发期间,自己的电脑即是一台服务器,也是一个客户端。

创建web服务器的基本步骤:

//1.导入http模块
const http=require('http')
//2.创建web服务器实例
const server=http.createServer()
//3.为服务器实例绑定request事件,监听客户端的请求
// 使用服务器实例的.on()方法,为服务器绑定一个request事件
// 参数:事件名称、回调函数
server.on('request',(req,res)=>{
    // 只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用这个事件处理函数
    console.log('Someone visit our web server.')
})
//4.启动服务器
// 调用server.listen(端口号,cb回调)方法,即可启动web服务器
server.listen(80,function()=>{
    console.log('http server running at http:80')//端口是80也可以省略不写
})

在vscode中新建一个终端也可以运行代码,就不需要打开cmd窗口了。按Ctrl+c可以停止服务器,释放端口。

req请求对象:

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数。如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下方式:

const http=require('http')
const server=http.createServer()
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}`
    console.log(str)
})
server.listen(90,()=>{
    console.log('server running at http:http://127.0.0.1')
})

res响应对象:

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

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

解决中文乱码:

const http=require('http')
const server=http.createServer()
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)
})
server.listen(90,()=>{
    console.log('server running at http:http://127.0.0.1')
})

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

核心实现步骤、动态响应内容:

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

模块化:

模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。模块化拆分的好处:

1.提高了代码的复用性

2.提高了代码的可维护性

3.可以实现按需加载

模块化规范:

模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的那些规则。模块化规范的好处:大家都遵守同样的模块化规范写代码,降低了沟通的成本,极大方便了各个模块之间的相互调用。

Node.js中模块的分类:

Node.js中根据模块来源的不同,将模块分为了三大类,分别是:

1.内置模块(内置模块是由Node.js官方提供的,例如fs、path、http等)

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

3.第三方模块(由第三方开发出来的模块,使用前需要先下载)

加载模块: 

使用强大的require()方法,可以加载需要的内置模块、用户自定义模块、第三方模块进行使用,例如:

// 1.加载内置的fs模块
const fs=require('fs')
// 2.加载用户的自定义模块,可以省略.js的后缀名,加载时会自动补全
const custom=require('./custom.js')
// 3.加载第三方模块
const moment=require('moment')

 (视频:B站黑马程序员)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值