一.运行方式
方式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地址数据信息
-
目的: 为了获取路径地址后携带的参数
-
默认解析方式 携带参数解析结果是字符串
url.parse( '路径地址' );
-
深度解析方式 携带参数解析结果是对象结构
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模块
-
作用: 获取地址栏中相关的数据信息
-
目的: 通过解构赋值语法形式 获取 文件名中的扩展名
- 完整的文件名扩展名
path.parse('路径地址').base;
2.扩展名
path.parse('路径地址').ext;
- 文件名
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的区别'
文件名
}
*/