“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”
fs
在js中,使用fs模块操作文件,需要如下方式导入
const fs = require('fs');
读取指定文件中的内容
//path 必选参数 字符串 表示文件路径
//options 表示以什么编码格式读取文件
//callback 必选 通过回调函数拿到读取的结果
fs.readFile(path,[options],callback)
向指定文件中写入内容
文件路径
写入内容
写入格式
回调函数
//只可创建文件 不能创建路径
//写入内容覆盖原内容
fs.writeFile(file,data,[options],callback)
路径动态拼接
1. 使用绝对路径
2. __dirname 表示当前文件所处目录
使用__dirname拼接路径
path
将多个路径片段拼接成一个完整的路径字符串
path.join([...paths])
从路径字符串中解析出文件名
path.basename()
获取路径中的文件扩展名
path.extname()
http
导入http模块
const http = require('http')
创建web服务器
创建web服务器实例
//创建一个web服务器实例
const server = http.createServer()
为服务器绑定request事件,监听客户端请求
//req是请求对象 包含与客户端相关的数据和属性
//res响应对象 包含与服务器相关的数据和属性
server.on('request',(req,res) => {
console.log(req.url)
console.log(req.method)
//向客户端发送内容,结束请求的处理过程
res.end('响应数据')
})
启动服务器
server.listen(端口号,() => {})
解决中文乱码
server.on('request',(req,res) => {
//手动设置Content-Type响应头内容编码格式
res.setHeader('Content-Type','text/html; charset=utf-8')
res.end('响应数据')
})
根据不同url响应不同的内容
server.on('request',(req,res) => {
//获取请求的url地址
const url = req.url;
//设置默认相应内容为404 not found
let content = '<h1>404 not found</h1>'
//判断用户请求地址
if (url === '/') {
content = '<h1>首页</h1>'
}else if (url === '/about') {
content = '<h1>关于</h1>'
}
//设置Content-Type请求头
res.setHeader('Content-Type','text/html; charset=utf-8')
//响应内容给客户端
res.end(content)
})
优化资源请求路径
let fpath = '';
if(url === '/'){
//如果请求路径为'/',手动指定文件路径
fpath = path.join(__dirname,'./clock/index.html')
}else {
//如果请求路径不为'/',拼接指定文件路径
fpath = path.join(__dirname,'/clock',url)
}
模块化
模块分类
内置模块
fs path http等
自定义模块
自定义的js文件
第三方模块
加载模块
require()
module
每个自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息
module.exports
将模块内的成员导出,require导入自定义模块时,得到的是module.exports指向的对象
module.exports.name = '张三';
exports
与module.exports指向一个对象
模块化规范
- 每个模块内部,module变量代表当前模块
- module.exports是对外的接口
- 加载模块其实是加载模块的module.exports属性,require()
包
nodejs的第三方模块叫做包
包是基于内置模块封装出来的
package.json
快速创建
//运行在英文目录下
npm init -y
dependencies
安装第三方模块的版本信息
devDependencies
某些包只在项目开发阶段用到,项目上线后不会用到,建议把这些包记录到devDependencies
节点中
npm i 包名 -D
等同于
npm i 包名 --save-dev
安装所有依赖包
npm install
卸载包
npm uninstall
查看当前下包镜像源
npm config get registry
切换为淘宝镜像源
npm config set registry=https://registry.npm.taobao.org/
nrm
利用nrm提供的终端命令,可以快速查看和切换下包的镜像源
npm i nrm -g
查看所有可用镜像源
nrm ls
切换为淘宝镜像
nrm use taobao
i5ting_toc
将md文档转为html页面的工具
//安装
npm i -g i5ting_toc
//转html页面
i5ting_toc -f md文件路径 -o
规范结构
- 单独目录存在
- 顶级目录下包含
package.json
包管理配置文件 package.json
中必须包含 name version main 这三个属性,分别代表 包的名字,版本号,包的入口
发布包
初始化包的基本结构
- 新建文件夹作为包的根目录
- 新建三个文件 包管理配置文件 package.json 包的入口文件 index.js 包的说明文档 README.md
初始化package.json
{
//包名
"name": "tools",
// 包的版本号
"version": "1.0.0",
// 包的入口文件
"main": "index.js",
// 包的描述信息
"description": "工具",
// 搜索的关键字
"keywords": ["a","b"],
// 遵循的开源许可协议
"license": "ISC"
}
在index.js中定义方法并导出
将不同功能进行模块化拆分
编写包的说明文档
上传
//登录
npm login
//发布
npm publish
//删除
npm unpublish 包名 --force
模块的加载机制
优先从缓存中加载
模块在第一次加载后会被缓存,后续调用会从缓存中加载,提高模块的加载效率
内置模块的加载
内置模块的加载优先级最高
自定义模块的加载机制
使用require()加载自定义模块时,必须指定./或../开头的路径标识符,否则node会把它当成内置模块或第三方模块加载
如果省略文件扩展名,则会按照以下顺序尝试加载
- 按照确切文件名
- 补全.js扩展名加载
- 补全.json扩展名加载
- 补全.node扩展名加载
- 加载失败报错
第三方模块加载机制
从当前模块的父目录开始,尝试从node_modules文件夹中加载第三方模块,如找不到,则移动到再上一层父目录的node_modules
目录作为模块
- 在被加载目录中查找package.json,寻找main属性,作为require()的入口
- 尝试加载index.js
- 终端报错