美文网首页
node基础

node基础

作者: Zindex | 来源:发表于2022-04-12 14:19 被阅读0次

node.js

node.js是基于v8引擎的JavaScript运行环境

终端快捷键

使用↑键可以快速定位到上一次执行的命令
使用tab键能够快速补全路径
使用esc键可以快速清空当前已输入命令
输入cls可以清空当前窗口

fs( file system )文件系统模块

fs模块,nodejs用来操作文件的模块

fs.readFile() 读取指定文件中的内容

fs.readFile(path[,options],callback)
  • 参数path:必选参数,字符串的文件路径
  • 参数option:可选参数,表示以什么编码格式来读取文件
  • 参数callback:必选参数,文件读取后执行的回调函数
    示例,以utf8编码格式读取txt
const fs = require('fs')
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
    if(err) return err
    console.log(dataStr)
})

如果读取成功err为null,如果读取失败,err的值为错误对象,dataStr的值为undefined

fs.writeFile() 写入文件或创建文件

fs.writeFile(fileName,data[,options],callback)
  • 参数path:要写入内容或要创建的文件路径
  • 参数data:表示要写入的内容
  • 参数option:表示以什么格式写入文件内容,默认值是utf8
  • 参数callback:文件写入内容之后执行的回调函数

注意点:

  1. 重复使用writeFile会覆盖文件内容
  2. writeFile方法只能创建文件,不能创建文件夹

fs模块路径动态拼接问题:

在node执行路径命令时候,./ 和 ../ 是根据node执行时所在的位置开始执行的,很容易会导致从执行位置开始找文件。
解决此方法可以使用绝对路径

__dirname 基于当前文件所处的目录

在node执行路径命令时候,./ 和 ../ 是根据node执行时所在的位置开始执行的,使用 __dirname 就可以基于当前nodejs文件的路径开始找, __dirname就是当前文件的绝对路径。
多数情况下,使用 __dirname 之后依靠的就是绝对路径,如果使用+号拼接基本不会再跟 ./ 和 ../,如果使用path.join就可以用 ./和../

path 模块

path模块,nodejs用来处理路径的模块。

const path = require('path')

path.join() 路径拼接

path.join([...paths])

参数 ...paths :代表任意多个路径片段

返回值为string类型,例子:

const path = require('path')
const pathStr = path.join('/a','/b/c','../','./d','e')
console.log(pathStr)    //会输出a\b\d\e

path.basename() 获取路径最后一部分

path.basename(path[,ext])

参数path:表示一个路径的字符串
参数ext:表示文件拓展名,传入拓展名之后返回值就不带拓展名
返回值:表示路径中的最后一部分

const path = require('path')
let fpath = '/a/b/c/index.html'
let fullName = path.basename(fpath)
console.log(fullName) //返回index.html

let  notExt = path.basename(fpath,'html')
console.log(notExt)     //返回index

path.extname() 获取路径中的文件拓展名

path.extname(path)

参数path:表示一个路径的字符串
返回值:<string>文件的拓展名部分(带.)

http 模块

http 模块是nodejs官方提供的、用来创建web服务器的模块。通过http模块提供的 http.createServer() 方法,就可以创建服务器应用

创建基本服务器

创建基本服务器四个步骤:

  1. 引入http模块
const http = require('http')
  1. 调用http模块里的createServer方法
const server = http.createServer()
  1. 为服务器实例绑定request事件
server.on('request',(req,res)=>{
    回调函数执行内容
})
  1. 调用服务器实例的listen方法,参数1为端口号,纯Number类型,参数2为回调函数
server.listen(80,()=>{
    启动成功后执行的回调函数
})

req 请求对象

server.on('request',(req,res)=>{
    回调函数执行内容
})

服务器绑定事件中,回调函数的req对象拥有着许多包含 发出请求的客户端 的属性,例如

req.url     请求所需要的的url是什么(只包含后面的路径)
req.method 请求对象所使用的方法

res 响应对象

服务器绑定事件中,回调函数的req对象拥有着许多 服务器相关 的属性与方法,例如

res.end() 向客户端发送指定的内容,并结束这次请求的处理过程

res 响应头设置

响应头可以设置字符编码解决中文乱码问题

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

模块化

模块化加载

使用 require() 方法即可,加载内置模块和第三方模块直接写名字,加载自定义模块需要写上路径

module对象

每个模块都有一个module对象,里面有着很多属性,例如path、filename、exports

module.exports 向外共享模块作用域

  • 在自定义模块中,可以使用module.exports 对象,将模块内的成员共享出去,供需导入的文件使用。
  • 另一个文件用require() 方法导入自定义模块时,得到的就是module.exports 所指向的对象。
  • 在自定义模块中,默认的 module.exports = {} ,也就是一个空对象。
  • module.exports 是一个对象,可以使用点.的形式将东西挂载到这个对象上
modeule.exports.username = 'zs'
module.exports.sayHello = ()=>{
    console.log('hello')
}

exports 对象

由于 module.exports 单词写起来比较复杂,为了简化,node 提供了 exports 对象。
默认情况下exports 和 module.exports 指向同一个对象。
最终结果以 module.exports 为准

module.exports = {
    gender: 'man',
    age: 22
}
exports.username = 'zs'

最终另一个文件导入得到的是 module.exports 的东西.
为了防止混乱,尽量不要在一个模块中同时使用exports 和 module.exports

ComonJS模块化规范

  1. 每个模块内部,module变量代表当前模块。
  2. module变量是一个对象,它的exports/module.exports属性是对外接口
  3. require()方法用于加载模块。加载某个模块,其实是加载该模块的module.exports属性。

npm

npm 包共享平台,官网 [npmjs.com]。
Node Package Manager ,npm包管理工具,nodejs安装的时候会一起安装到电脑上

npm项目初始化

npm init -y

执行此命令,会生成一个package.json配置文件。
注意:命令只能在英文且没有空格的目录下成功运行

npm 国内镜像

查询当前下载包的地址和切换下载包的地址

npm config get registry 
npm config set registry=https://registry.npmmirror.com/    

或者使用nrm工具,安装-查询所有可用镜像源-切换为淘宝镜像源

nrm i nrm -g
nrm ls
nrm use taobao

npm 安装包命令

npm install 包的完整名称

简写形式

npm i 包的完整名称

安装指定版本的包,在包名后面接@然后写上版本号

npm i moment@2.22.2

安装包,并只在开发环境用到(记录到开发依赖上)

npm install 包名 --save-dev
//或简写形式,包名与杠D顺序可调换
npm i 包名 -D

安装全局包,运行环境下使用的包

npm install 包名 -g
npm i 包名 -g

引用包

const 包的名称 = require('包的名称')

通常,引用包的时候用的变量接收的那个变量名,通常和包同名

卸载包

npm uninstall 具体包的名字

npm uninstall moment

npm 自动创建的文件

初次安装包后,目录下会多出一个 node_modules 文件夹和 package-lock.json 文件,其中

  • node_modules 文件夹用来存放所有已安装到项目中的包,require() 导入第三方包时,就是从这个目录查找。通常需要把这个文件夹添加到.gitignore忽略文件里去
  • package-lock.json 配置文件用来记录 node_modules 目录下每一个包的下载信息,例如包的名字、版本号、下载地址等
    项目init初始化后会生成一个package.json 配置文件,用来记录与项目有关的一些配置信息。
    例如:项目的名称、版本号、描述等。项目中都用到了那些包。哪些包只在开发期间会用到。哪些包在开发和部署时都需要用到。

package.json

dependencies 依赖节点

packagejson文件的此属性会记录该项目依赖哪些第三方npm包和版本号。

devDependencies 开发依赖节点

此属性会记录哪些包只在项目开发阶段会用到,在项目上线后不会用到的。

当我们拿到一个剔除了node_modules文件夹的项目时候,通常使用 npm install 命令(或npm i)安装所有denpendencies和devDependencies节点里记录的所有包

创建npm包

一个合格的npm包必须满足这几个条件

  1. 包必须以单独的目录而存在
  2. 包的顶级目录下必须包含 package.json
  3. package.json 中必须包含name,version,main。分别代表包的名字、版本号、包的入口

发布npm包的相关指令

登录到npm和发布包

npm login
npm publish

删除72小时内已发布的包

npm unpublish 包名 --force

模块加载机制

  • 模块在第一次加载后会被缓存。这也意味着多次调用 require() 不会导致模块的代码被执行多次
  • 内置模块、自定义模块、第三方模块。都会优先从缓存中加载。
  • 内置模块加载优先度最高。
  • 如果加载模块时没有 ./ 或 ../ 这样的路径标识符,会当作内置模块或第三方模块进行加载,一直往上级目录的node_modules 文件夹查找
  • 加载时候如果没有文件后缀名会按 .js .json .node 后缀顺序加载
  • 加载当目录(文件夹)作为模块的时候,会先从package.json 寻找main属性作为入口。如果没有,则加载目录下的index.js

相关文章

  • Vue学习第一天

    基础知识 node 安装 Node(傻瓜式安装) npm基础 npm 之于 Node.js ,就像 pip 之于 ...

  • 前端Node.js 基础

    一 .Node.js 基础 目录 Node开发概述Node运行环境搭建Node.js快速入门 1. Node开发概...

  • webpack

    基于node环境,必须确保node已经安装好?node -vnpm -v webpack基础入门官网: http:...

  • HashMap 源码理解

    基础 Node定义 table hash表,Node数组。 size: hash表中Node节点总数,与hash...

  • 01-Node 基础使用

    Node 基础使用Node 介绍Node 模块化开发模块成员的导出模块成员的导入Node 系统模块 path 和 ...

  • Node-RED编程基础

    Node-RED编程基础 【Node-RED与IoT开发交流】785381620 ,欢迎加入! Node-RED ...

  • node基础

    http & url 包管理 npm init 安装包 1、使用 npm install node_module ...

  • Node基础

    什么是Nodejs Nodejs是c++编写的,采用Chrome浏览器V8引擎,本质上是JavaScript运行环...

  • node基础

    一.命令行窗口 1.1 打开命令行窗口(也称命令行,终端,shell) 开始菜单-->运行-->cmd win+r...

  • Node基础

    Node基础 为什么学习Node? IO优势对于文件读写,Node采用的是非阻塞IO传统IO在读写文件的时候CPU...

网友评论

      本文标题:node基础

      本文链接:https://www.haomeiwen.com/subject/sgtnsrtx.html