nodejs_自定义和fs url内置模块化

111 阅读5分钟

一.运行方式

方式1: 通过 cmd 命令行 运行nodejs程序

方式2: 通过 vscode 编辑器 终端运行nodejs

方式3: shift + 鼠标右键 window操作系统的 powershell 窗口

二. 运行外部js文件

1, 切换盘符-----> 盘符 冒号 回车

2, 切换路径------> cd 空格 文件夹路径

3, 运行文件-------> node 空格 文件名 或者 node 空格 文件名.js

三. nodejs的模块化开发方式

1.自定义模块

我们程序员自己设定的nodejs 开发程序

2.内置模块

nodejs 自己设定好的模块

语法: const 变量 = require('模块名称');

3.第三方模块

其他程序员设定好的模块,下载第三方模块 , 再导入使用 第三方模块

四. 自定义模块化

  • 文件 b 中导入 文件 a , 在cmd中运行 b.js
// 文件 a.js
​
// 设定数据和函数方法
    let name = '张三' ;
    let age = 18 ; 
    let sex = '男' ;
​
    const arr = [100,200,300,400];
    const obj = { addr:'北京' , phone:123456 , email:'123@qq.com' };
​
    function fa1(){};
    function fa2(){};
    function fa3(){};
    function fa4(){};
​
//  导出 
module.exports = {name, age, sex, arr, obj}
​
// 文件 b.js// 导入 a.js
const res = require('./a.js')
console.log(res)

五. fs 内置模块化

  • 作用: 读取 写入 文件内容的nodejs内置模块

    • 读取

      • 1.fs模块.readFile ------> 异步

      fs.readFile( 参数1 , 参数2 , 参数3 )

      参数1 读取外部文件的路径

      参数2 读取外部文件的编码格式 utf8

      参数3 读取外部文件的回调函数

      回调函数参数1 读取文件 报错信息

      回调函数参数2 读取文件 文件信息

      • 2.fs模块.readFileSync ------> 同步
// 导入 内置fs模块
const fs = require('fs');
// console.log( fs );// 读取外部文件内容
fs.readFile( './demo.txt' , 'utf8' , ( error , data )=>{
    // 如果报错信息存储的不是null 
    // 证明有报错信息 抛出报错信息 终止之后程序的执行
    if( error !== null ) throw('文件读取有问题');
​
    // 如果没有报错信息 再触发执行之后的程序
    console.log( data );
})
  • 写入

    • 1.fs.writeFile -------> 异步

      fs.writeFile( 参数1 , 参数2 , 参数3 )

      参数1 写入外部文件的路径

      有这个文件 对这个文件执行写入操作

      没有这个文件 创建这个文件 对这个文件执行写入操作

      参数2 写入外部文件的内容

      参数3 写入外部文件的回调函数

      外部文件写入操作一定会执行成功

    • 2.fs.writeSync ------> 同步

    • 3.fs.appendFile------> 在文件末尾新增写入

      fs.appendFile('./aaa.txt','我是写入的内容',()=>{})
      
// 导入内置模块fs
const fs = require('fs')
// console.log(fs)// 写入内容
// ./demo.txt 和原文件名一样直接写入到文本内
fs.writeFile('./demo.txt','我是fs写入的文字',function(){})
​
// ./demo.txt 和原文件名不一样,重新创建一个/abc.txt文件
fs.writeFile('./abc.txt','我是fs写入的文字2222',function(){})

六. 内置url模块

  • 作用: 解析 url地址数据信息

  • 目的: 为了获取路径地址后携带的参数

    1. 默认解析方式 携带参数解析结果是字符串

      url.parse( '路径地址' );

    2. 深度解析方式 携带参数解析结果是对象结构

    url.parse( '路径地址' , true );

    3.存储 携带参数解析结果

    url.parse( '路径地址' , true ).query ;

// 引入url内置模块化
const url = require('url')
// console.log(url)// 准备一个路径地址
let urlStr = 'https://www.baidu.com:8088/a/b/c/index.html?name=张三&age=18&sex=男'
​
​
// 解析url路径--->parse
// 加true,深度解析----> 结果.query 中 以对象形式 存储 携带的参数     
let b = url.parse(urlStr,true).query
console.log(b)
// 不加true,普通解析-----> 结果.query 中 以字符串形式 存储 携带的参数      
let a = url.parse(urlStr).query
console.log(a)
​
​
// 通过解构赋值 name=张三&age=18&sex=男中的值 需要哪个值获取哪个值
 let {name,age} = url.parse(urlStr,true).query
 console.log(name,age)
​
/*
{
   protocol: 'https:',
          请求协议
  slashes: true,
         地址路径以 / 斜杠原则解析
  auth: null,
          证书,权限设定等
  host: 'www.baidu.com:8088',
           服务器地址和端口
   port: '8088',
           端口号
   hostname: 'www.baidu.com',
          服务器名称
   hash: null,
         细分路径
   search: '?name=张三&age=18&sex=男',
          携带参数
   query: 'name=张三&age=18&sex=男',
           携带参数的解析结果 默认解析结果是字符串格式
           如果 url.parse() 第二个参数设定为true 执行深度解析 解析结果是 对象形式         
  pathname: '/a/b/c/index.html',
           文件路径
  path: '/a/b/c/index.html?name=张三&age=18&sex=男',
            完成的文件路径和携带的参数
                }
*/

七 内置path模块

  • 作用: 获取地址栏中相关的数据信息

  • 目的: 通过解构赋值语法形式 获取 文件名中的扩展名

    1. 完整的文件名扩展名

    path.parse('路径地址').base;

    2.扩展名

    path.parse('路径地址').ext;

    1. 文件名

    path.parse('路径地址').name;

// 获取内置模块化  path
const path = require('path')
// console.log(path)// 准备一个路径地址  对携带参数的请求
let pathStr = 'http://127.0.0.1:5500/day05/02_代码/shop3/pages/list.html?category=大家电'
// 获取扩展名 .html?category=大家电携带参数
let res = path.parse(pathStr)
console.log(res)
​
​
// 准备一个路径地址  对没有携带参数的请求
let pathStr2 = 'E:/bk_2220/week6/day03/02_代码/02_proxy和jsonp的区别.html'
// 通过结构赋值 获取 当前文件的扩展名
let ext = path.parse(pathStr2)
console.log(ext)
/*
网址 / 绝对路径
     http://127.0.0.1:5500/day05/02_代码/shop3/pages/list.html?category=大家电                 
                    {
                        root: '',
                        dir: 'http://127.0.0.1:5500/day05/02_代码/shop3/pages',
                            文件夹路径地址
                        base: 'list.html?category=大家电',
                            文件名携带参数
                        ext: '.html?category=大家电',
                            扩展名 也就是 最后一个点之后的内容
                        name: 'list'
                            文件名
                    }
            
盘符 / 相对路径
     E:/bk_2220/week6/day03/02_代码/02_proxy和jsonp的区别.html
                    {
                        root: 'E:/',
                            盘符路径
                        dir: 'E:/bk_2220/week6/day03/02_代码',
                            文件夹路径
                        base: '02_proxy和jsonp的区别.html',
                            完整的文件名称
                        ext: '.html',
                            扩展名
                        name: '02_proxy和jsonp的区别'
                            文件名
                    }

*/