Node.js基础知识

标题1 初识Node.js

  1. JavaScript可以在浏览器中被执行的原因是因为浏览器中的解析引擎(Chrome中的V8)
  2. 浏览器中的JavaScript运行环境:解析引擎和内置API(浏览器提供的特殊的接口)
  3. 概念:Node.js是一个基于chromeV8引擎的JavaScript的运行环境
  4. 浏览器是JavaScript的前端运行环境;Node.js是JavaScript的后端运行环境,node.js无法调用DOM和BOM等浏览器内置API
  5. 终端的一些命令:
  • tab键快速补全文件路径、ESC键快速清空当前已输入的命令,输入cls可以清空终端,输入ls命令获取文件目录
  1. 在Node.js环境中执行JavaScript文件的步骤:
  • 打开终端
  • 输入node 要执行的js文件的路径
  • 在执行文件之前,要切换文件的路径到当前。在终端中切换文件路径:cd 要去的文件路径,如果切换不成功的话就输入所在盘的大写字母,比如切换到D盘,首先按照方法切换,如果没有成功就再输入D:
  • 打开终端就直接处于当前文件的方法:位置放在当前要运行的js文件,按住shift加鼠标右键打开PowerShell,打开终端即可,就直接定位到当前要执行的文件
  • 所处文件的地址栏中输入cmd,打开终端

标题 2 Node.js内置API模块

  1. fs文件系统模块
    使用前先导入:const fs=require('fs')
  • fs中的方法:
  • 1.1 fs.readFile(),用来读取指定文件中的内容 fs.readFile(path[,options],callback)
    示例代码:readFileSync()同步的方式读取文件,不需要回调函数,直接就返回了读取的数据
    path:读取文件的存放路径
    options:参数格式
    callback:执行后的回调函数
const fs=require('fs')
fs.readFile('/files/11.text','utf8',function(err,dataStr) {
consoloe.log(err)//读取成功,则err的值为null;读取失败,则err的值为错误对象
console.log(dataStr)//读取成功,dataStr打印成功的结果;读取失败,dataStr的值为undefined
})
err代表读取成功的结果
dataStr代表读取失败的结果
  • 1.2 fs.writeFile()方法,用来向指定的文件中写入的内容 :fs.writeFile(path,data,callback)
    参数1:表示文件的存放路径
    参数2:表示要写入的内容
    参数3:回调函数
const fs=require('fs')
fs.writeFlie('文件存放路径','hello fs',function(err) {
console.log(err)//写入成功,err的值是null;写入失败,err的值是一个错误对象
如果文件不存在,则会先创建该文件再写入内容;如果文件存在则会覆盖原有的内容
//如果想向文件中追加内容就使用appendFile()方法
})

异步的创建目录:fs.mkdir()
删除文件:fs.unlink(path,callback)

  1. path路径模块
  • 2.1 使用之前需要先导入path const path=require('path')
    path中的方法:
  • path.join() 让多个路径片段拼接成一个完整的路径字符串
    示例代码:
const path=require('path')
var p=path.join('/a','/b','../','/d')
console.log(p);//打印结果是\a\d

../可以抵消它的上一层目录

  • path.basename() 可以获取路径文件中的最后一部分,通常用来获取路径中的文件名或者文件中的后缀名
var p=path.basename('./clock1/index.html','.html')
console.log(p);//打印结果是index,如果没有参数2,结果是index.html
//参数1:文件的存放路径   参数2:表示文件的扩展名   返回值:返回的是路径中的最后一部分
  • path.extname() 获取路径中的文件扩展名
    参数1:文件路径的字符串
    返回值:文件的后缀名
var p=path.extname('/clock/index.html')
console.log(p);//打印结果是.html
  1. http模块
  • 3.1 概念:用来创建web服务器的模块,通过http模块提供的createSerer()方法可以创建一个web服务器
    使用的步骤:
  • 导入 const http=require(‘http’)
  • 创建web服务器实例 const server=http.createServer()
  • 为服务器实例绑定request事件
server.on('request',function(req,res) {
  //req:请求对象,包含与客户端相关的属性和方法
    req.url:得到客户端请求的url地址,如果是根域名,返回的就是“/”
    req.method:得到客户端请求的方式
  //res:响应对象,包含与服务器相关的属性和方法
  res.end()向客户端响应指定的内容,并结束这次请求的处理过程
  res.statusCode 可以修改状态码
  
})

res.setHeader('Content-Type','text/html;charset=utf-8') 防止中文乱码的情况,必须设置响应头

  • 启动服务器
server.listen(80,() => {
  console.log('http server running at http://127.0.0.1')
  //80,是端口号,可以修改,如果是80端口,在浏览器输入地址的时候可以不用写端口号,如果不是80端口,在发起请求的时候必须写上端口号
})
  1. 根据不同的url响应不同的html内容
    动态响应内容

标题3 模块化

  1. 模块化的分类:内置模块、自定义模块、第三方模块(包)
  2. 加载模块:require()方法
  • 加载内置模块:const fs=require('fs')直接导入内置模块即可
  • 加载自定义模块啊:const custom=require('自定义模块的路径')自定义模块就是一个js文件,在 导入的时候可以省略后缀名
  • 加载第三方模块,需要下载包
  1. 模块作用域:自定义模块中定义的变量,只能在模块内部使用,不能在导入模块的区域使用,如果想在外部使用自定义模块的变量,需要利用module.exports对象或者exports属性
  2. module.exports对象:在自定义模块中都存在这样一个对象,存储和当前模块相关的信息,比如exports属性,在外界使用require方法导入自定义模块的时候,得到的成员就是那个模块中通过module.export指向的那个对象。默认情况下这个对象的值是空
  3. 自定义模块向外共享一个成员:在自定义模块的内部使用module.exports对象或者exports属性,示例代码:
module.exports.uname='zs';//这个uname属性就可以在外部使用
exports.uname='zs'
module.exports={
 uname:'zs',
 age:18,
 sayhi:function() {}
}
//最后在导入使用模块的时候,结果是{uname:'zs',age:18,sayhi: [Function: sayhi]}

exports对象和module.exports对象作用一样,都可以向外共享一个成员,默认情况下这个对象是空值
注意:使用require()方法导入模块时,导入的结果永远以module.exports指向的对象为准,所以一般情况下我们都使用module.exports来向外共享成员

标题 4 第三方模块(又称为包)

  1. 网址https://www.npmjs.com
  2. 下载包的方法,在项目终端中输入以下命令
npm install 包的名称
或者
npm i 包的名称
安装指定版本的包:npm i 包的名称@版本号

版本号的代表意义:2.24.0

  • 第一位数字代表:大版本
  • 第二位数字代表:功能版本
  • 第三位数字代表:BUG修复版本
    版本书写规则:只要前面的版本号增长了,后面的版本号就要归零
  1. 使用包的步骤:
  • 导入需要的包
  • 查看官方的使用方法,进入官网,搜索需要的包,点击Documentation
  1. 初次安装包的时候,会在项目目录下多两个文档,它们分别是node_module文件夹package-lock.json文件
  • node_module文件夹:这个文件夹存放的都是这个项目中安装的所有包,由于体积过大,一般在实际项目开发中,都存放在.gitgnore忽略文件中
  • package-lock.json:这个文件中记录的是每一个包的下载信息,比如包的名称、版本号、地址等
  1. 包管理配置文件
    作用:主要是用来存放项目主要用到的包信息,这个文件不是自己建的,是在终端输入命令创建的
  • 项目根目录下必须提供一个package.json文件,创建的命令:npm init -y,文件中的
  • 核心依赖包dependencies对象就是项目的,创建命令是npm i 包的名称
  • 开发依赖包devDependencies对象:包只在项目开发的时候用到,项目上线之后就不用了,创建的命令是npm i 包的名称 -D或者npm install 包名 --save-dev创建的就是开发依赖包
  1. 下载包的时候,因为网站是国外的,所以就比较慢,这时候就可以通过切换镜像源来提高下载速度或者是安装全局的nrm即可,或者是安装nrm安装命令:npm i nrm -g查看安装成功:nrm ls
  • 查看当前的下包镜像源npm config get registry
  • 将下包的镜像源切换到淘宝镜像源npm config set registry='https://registry.npm.taobao.org/'
  • 检查镜像源是否下载成功npm config get registry
  • 在发布我们自己包的时候,需要切换镜像源:
nrm use 镜像源名称(npm或者taobao)
  1. 全局包安装,只需要在安装包的时候在后面加一个-g
  2. 规范包的结构:
  • 存放包必须是一个单独的文件夹
  • 包里面必须包含package.json这个文件
  • 在package.json文件中,必须存在三个属性name、version、main,分别代表包的名称、包的版本号、包的入口函数
  1. 发布自己的包的步骤:
  • 新建一个文件夹,当作自己的根目录
  • 在根目录中,分别创建package.json包配置文件、index.js入口函数、、README.md包说明文档
  • 在终端上输入nrm ls命令,查看镜像源,需要利用nrm use npm 命令切换到npm,之后输入npm login登录自己的npm账号,接下来是发布自己的包,利用npm publish即可发布
    注:删除发布的包npm unpublish 包的名称 --force 只能删除72小时以内发布的包,删除的包,在24小时内不允许重复发布
  1. 模块的加载机制
  • 内置模块的优先级最高
  • 在使用require()加载自定义模块的时候,必须以./../作为路径标识符,否则就会把自定义模块当作内置模块或者第三方模块来加载
  • 第三方模块的加载机制:在查找第三方模块的时候,如果没有找到第三方模块,那么就会向它的上一层父目录寻找,寻找的原则就是一直向上一层父目录查找
  • 目录作为模块,先找package.json文件,如果找不到就-----试图加载目录下的index.js文件-----

标题 5 第三方模块(express模块)

  1. 概念:类似于node.js里面的htt内置模块的作用,用于创建web服务器的
    本质:就是npm上的一个第三方包,提供快速创建web服务器的便捷方法
  2. 创建基本的服务器步骤:
//1.导入express
const express=require('express')
//2.创建web服务器
const app=express()
//3.启动web服务器
app.listen(80,() => {
consloe.log('express server running at http://127.0.0.1')
})
  1. 监听并响应客户端请求
  • 监听客户端的请求
//1.监听客户端的GET请求
app.get('请求的url地址',function(req,res) {处理函数})
//2.监听客户端的post请求
app.post('请求的URL',function(req,res) {
//处理函数
})
  • 响应客户端的请求
res.send();//响应的内容可以是JSON对象,也可以是文本字符串,和http内置模块响应方式res.end()不同的在于后者只能是字符串
  1. 获取客户端参数
  • 获取URL中携带的查询参数,客户端使用?uname=zs&age=18这种查询字符串的形式发送到服务器的参数 req.query
app.get('/',(req,res) => {
  //默认情况下req.query是一个空对象,如果要访问具体的参数,可以使用
  req.query.uname   req.query.age
})
  • 获取URL中的动态参数,也就是URL地址中后面的参数 ,通过req.params对象就可以获取
    获取动态参数
  1. 托管静态资源express.static()
    概念:通俗点说就是创建一个静态的资源服务器,通过它的托管它的父目录就可以访问到里面的所有文件,通过如下代码就可以访问到public里面的html、css、js等文件
app.use(express.static('public'))

注:express在指定的静态目录下查找文件并对外提供资源的访问路径,因此存放静态文件的目录名不会出现在URL地址中

  1. 挂载路径前缀:通过以下方式就可以访问有前缀的路径地址
app.use('/public',express.statics())
//可以访问http://localhost/public/css/style.css这样的url

版权声明:本文为weixin_45651869原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。