【NodeJs】入门

2024-06-29 1522阅读

目录

一、前导

二、 url模块

三、path模块

四、buffer模块

五、fs模块

六、stream流模块

七、os模块

八、crypto模块

九、util模块

十、http模块


nodejs官网 Node.js — 在任何地方运行 JavaScript

nmp是Node.js包管理器,用来安装各种库、框架和工具,官网 https://www.npmjs.com/

一、前导

查看安装的版本:

node -v
npm -v

查看当前镜像源:

npm get registry

 设置淘宝镜像源:

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

安装Vs插件:

  • Code Runner,并勾选Whether to clear prcvious output before each run.

    【NodeJs】入门

    二、 url模块

    import url from 'url'
    let __filename = url.fileURLToPath(import.meta.url)
    console.log('当前文件的路径:', __filename) 

     输出:

    当前文件的路径: e:\vue\node\demo\demo.js

    1、导入包出现如下错误:

    【NodeJs】入门

    解决方法:

    初始化配置文件:

    npm init

    在package.json中添加以下一行:

    "type": "module",

    【NodeJs】入门

    2、出现错误:安装node后,在cmd中运行node -v正常,但在VS中运行node -v,报如下错误:

    【NodeJs】入门

    【NodeJs】入门

    解决方法:

    以管理员身份运行VS code,若不成功,则重启电脑。

    三、path模块

    import url from 'url'
    import path from 'path'
    //file:// 的使用场景: 1.跨平台兼容性 2.url相关的操作
    console.log('当前文件的url格式路径:', import.meta.url) 
    let __filename = url.fileURLToPath(import.meta.url)
    console.log('当前文件的路径:', __filename) 
    let __dirname = path.dirname(__filename)
    console.log('当前文件所在目录的路径:', __dirname)
    let basename = path.basename(__filename) 
    console.log('文件名:', basename)
    let extname = path.extname(__filename) 
    console.log('扩展名:', extname)

    输出:

    当前文件的url格式路径: file:///e:/vue/node/demo/tempCodeRunnerFile.js
    当前文件的路径: e:\vue\node\demo\tempCodeRunnerFile.js
    当前文件所在目录的路径: e:\vue\node\demo
    文件名: tempCodeRunnerFile.js
    扩展名: .js
    • 路径拼接:
      path.join(__dirname,"/test.jpg")
      • 路径解析:
        path.parse(__filename)

         输出:

        pathObj: {
          root: 'e:\\',
          dir: 'e:\\vue\\node\\demo',
          base: 'demo.js',
          ext: '.js',
          name: 'demo'
        }

        四、buffer模块

        • 以十六进制形式显示每个字节;
        • 内部存储的是二进制数据;
        • 在打印buffer对象时,会将每个字节的数据转换为十六进制形式。
          //Buffer.alloc(8)创建了一个大小为8字节的Buffer, 并使用0填充 [作用:内存分配]
          console.log('创建 Buffer:', Buffer.alloc(8))
          console.log('Buffer 的长度:', Buffer.alloc(8).length)
          //String 转换为 Buffer (常用于将数据写入文件、通过网络发送数据等)
          let urlBuffer = Buffer.from('nodejs.com', 'utf8') //创建一个包含字符串 'nodejs.com' 的 Buffer
          console.log('字符串转换为 Buffer:', urlBuffer)
          //Buffer 转换为 String (常用于从文件读取数据、接收到网络数据后解析内容)
          console.log('Buffer 转换为字符串:', urlBuffer.toString('utf8'))
          //Buffer 转换为 Base64 (常用于在文本协议中传输二进制数据,如:嵌入图像资源、电子邮件附件等)
          const urlBase64 = urlBuffer.toString('base64')
          console.log('Buffer 转换为 Base64:', urlBase64)
          //Base64 转换为 Buffer
          console.log('Base64 转换为 Buffer:', Buffer.from(urlBase64, 'base64'))

          输出:

          创建 Buffer: 
          Buffer 的长度: 8
          字符串转换为 Buffer: 
          Buffer 转换为字符串: nodejs.com
          Buffer 转换为 Base64: bm9kZWpzLmNvbQ==
          Base64 转换为 Buffer: 

          五、fs模块

          import fs from 'fs'
          //创建目录并写入文件
          const test = async (dir, path, content) => {
            try {
              await fs.promises.mkdir(dir, { recursive: true }) // recursive: true 允许递归创建多级目录
              console.log("目录创建成功")
              fs.promises.writeFile(path, content)
              console.log("写入成功")
            } catch (err) {
              console.error(`目录创建失败: ${err}`)
            }
          }
          let dir = "zx/log/"
          let name = "test.txt"
          let path = dir + name 
          let content = "nodejs.com"
          test(dir, path, content)
          • 追加文件:
            fs.promises.appendFile(path, content)
            • 读取文件:
              fs.promises.readFile(path)
              console.log(String(data))
              • 文件或目录重命名:
                fs.promises.rename(oldPath, newPath)
                • 删除文件:
                  fs.promises.unlink(path)
                  • 删除目录:
                    fs.promises.rm(path, { recursive: true }) // recursive: true 允许递归删除多级目录

                    六、stream流模块

                    流是一种处理数据的方式,对于比较大的文件,流可以逐步处理数据,而不是一次性将整个文件加载到内存中,口节省内存资源,避免内存溢出等问题。

                    通过fs实现的功能也可以通过stream实现。

                    import fs from 'fs'
                    const test = async (dir, path, content) => {
                      try {
                        await fs.promises.mkdir(dir, { recursive: true }) // recursive: true 允许递归创建多级目录
                        console.log("目录创建成功")
                        const writeStream = fs.createWriteStream(path)
                        writeStream.on('error', err => {  
                            console.error(`文件写入失败: ${err}`)
                            writeStream.close() // 出错时关闭流
                        })
                      
                        writeStream.on('finish', () => {  
                            console.log("文件写入成功")
                        })
                        
                        writeStream.write(content, 'utf8')
                        writeStream.end()
                      } catch (err) {
                        console.error(`目录创建失败: ${err}`)
                      }
                    }
                    let dir = "zx/test/"
                    let name = "web.txt"
                    let path = dir + name 
                    let content = "nodejs.com"
                    test(dir, path, content)
                    • 追加文件:
                      const appendStream = fs.createWriteStream(path, { flags: 'a' })
                      • 读取文件:
                        const readStream = fs.createReadStream(path)
                          
                        let content = ''
                        readStream.on('data', chunk => {
                          console.log(chunk) //chunk是指在流中传输的数据块
                          content += chunk.toString('utf8') //将Buffer转换为UTF-8编码的字符串
                        })

                        七、os模块

                        用于获取操作系统类型、系统架构、CPU核心数等。

                        八、crypto模块

                        提供加密与解密功能,支持各种哈希算法、对称加密与非对称加密等。

                        九、util模块

                        提供一些工具函数,如格式化输出字符串,将参数插入到占位符所在的位置,%s 是一个字符串(String)类型的占位符, %d 是一个十进制整数(Decimal Integer)类型的占位符。

                        import util from 'util'
                        const url = 'nodejs.com'
                        const user = 23
                        const msg = util.format('网址: %s, 在线人数: %d', url, user)
                        console.log(msg)
                        //将对象转换为字符串
                        const webObj = { url: 'www.nodejs.com', user: 50 }
                        console.log('webObj:', typeof webObj, webObj)
                        const webStr = util.inspect(webObj)
                        console.log('webStr:', typeof webStr, webStr)

                        输出:

                        网址: nodejs.com, 在线人数: 23
                        webObj: object { url: 'www.nodejs.com', user: 50 }
                        webStr: string { url: 'www.nodejs.com', user: 50 }

                        十、http模块

                        import http from 'http'
                        const hostname = '127.0.0.1' 
                        const port = 8008 //服务器监听的端口号
                        const server = http.createServer((request, response) => {
                          response.write("nodejs.com") //发送响应数据
                          response.end() //结束响应
                        })
                        //启动 http 服务器,并在指定的ip地址(127.0.0.1)和端口(8008)上监听连接请求
                        server.listen(port, hostname, () => {
                          console.log(`服务器已启动: http://${hostname}:${port}`)
                        })

                         【NodeJs】入门

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]