美文网首页
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

    相关文章

      网友评论

          本文标题:node基础

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