常用的内置模块(path,fs,url,querystring,)
Node.js中提供了一些原生的模块,我们称之为内置模块。此外,也可以通过NPM命令安装第三方模块,安装完毕后使用方式和内置模块没有什么不同。
Node.js中的原生模块直接通过require就能获得,参考Node.js API文档来使用这些原生模块。
fs模块(主要是操作文件和文件夹)
fs
模块以 POSIX 标准函数的方式提供了与文件系统进行交互的API,fs中的每个方法都分同步和异步两种方式调用。通过fs模块可以获取一个目录结构,及其子目录或目录树下文件的特征,甚至可以读写、复制或者删除文件。
操作文件:
在.js的文件中可以提前引入模块和封装好的回调函数
var fs=require('fs')
var path=require('path')
const handleErr=function(str){
return function(err){
console.log(err?str+'失败!':str+'成功!')
}
}
创建文件:
fs.writeFile('文件名', '内容', handleError('创建文件'))
删除文件:
此处应注意只能删除空的文件,
fs.unlink('文件名', handleError('删除文件'))
修改文件:
fs.writeFile或者fs.appendFile
重命名文件:
fs.rename('文件名', '新名字', handleError('重命名成功'))
读取文件:
fs.readFile(path.resolve('文件路径'), { encoding: 'utf8'/*编码格式*/ }, function (err, data) {
if (err) {
console.error(err)
}
console.log(data)
})
操作目录:
创建目录:
fs.mkdir(path.resolve('目录名'), handleError('创建目录'))
删除目录:
fs.rmdir(path.resolve('目录名'), handleError('删除目录'))
重命名目录:
fs.rename(path.resolve('目录名'),path.resolve('新目录名'), handleError('重命名目录'))
查找目录的子目录:
fs.rmdir(path.resolve('dist'), handleError('删除目录'))
fs.readdir(path.resolve(''))
利用删除目录和递归进行目录的删除:
function removeDirRecusily(dirPath) {
//查找目录是否存在
try {
//如果当前的代码报错,会把错误抛出,继续执行后面的代码
fs.accessSync(dirPath)//判断dirPath是否是一个空的目录
const files = fs.readdirSync(dirPath, { withFileTypes: true })//输出的是对象格式,能够区分文件和目录
if (files.length === 0) {
fs.rmdirSync(dirPath)//判断如果是空目录直接删除
} else {
//遍历目录
files.forEach(function (file) {
var filePath = path.resolve(dirPath, file.name)
if (file.isFile()) {
//如果是文件的话,就直接删除
fs.unlinkSync(filePath)
} else if (file.isDirectory()) {
//递归删除内部的子目录
removeDirRecusily(filePath)
}
})
fs.rmdirSync(dirPath)
}
} catch (e) {
console.error(e)
}
}
path内置模块(主要是提供操作路径与获取路径的方法)
在.js文件中提前引入依赖:
var path = require('path')
console.log(__dirname)
console.log(__filename)
获取完整文件路径的文件名字:
console.log(path.basename('/Users/Documents/xiaoming/xiaomingming/新建.txt'))
获取文件所在的完整路径:
console.log(path.dirname('/Users/Documents/xiaoming/xiaomingming/新建.txt'))
文件的扩展名:
console.log(path.extname(__filename))
join用来拼接路径:
console.log(path.join('Documents', '/users', 'xiaoming', '..', './', '新建.tx'))
将路径或路径片段的序列解析为绝对路径。:
console.log(path.resolve('Documents', '/users', 'xiaoming', '..', './', '新建.tx'))
规则:
1. 给定的路径序列从右到左进行处理,每个后续的 path
前置,直到构造出一个绝对路径。
2. 如果在处理完所有给定的 path
片段之后还未生成绝对路径,则再加上当前工作目录。
3. 生成的路径已规范化,并且除非将路径解析为根目录,否则将删除尾部斜杠。
url模块(url操作方法)
在.js文件中提前引入依赖
var url = require('url')
url模块主要处理URL(统一资源定位符),URL的格式构成:
协议+认证+主机+端口+路径+查询字符串+哈希值。
url模块主要提供了两个模块:
url.format()
:负责把一个url的json对象转换成合法的url地址。url.parse()
:负责把一个url地址转换成一个url的json对象。
var urlString = url.format({
protocol: 'https',
hostname: 'm.taobao.com',
pathname: '/iphone/11dp',
query: {
page: 1,
format: 'json'
},
hash: 'fddfsdf'
})
// 把 url obj 转换成 url string
console.log(url.parse(urlString))
// resolve可以拼凑路径
console.log(url.resolve(urlString, '/多普达/dopod.js'))
querystring模块(主要是查询url后面的字符串)
在.js文件中提前引入依赖
var querystring = require('querystring')
通过url.parse转换的url对象中的query对象是一个字符串,如果想进一步拿到查询字符串的键值对,需要再通过querystring来转换。
querystring.stringify()
:可以把查询字符串对象转换成字符串。querystring.stringify
默认会对非ASCII字符进行百分比编码,即内部调用querystring.escape()
方法。
querystring.parse()
:可以把查询字符串转换成对象。querystring.parse
默认会对经过百分比编码的字符进行解码操作,即内部调用了querystring.unescape()
。
// 把查询字符串转换成对象
console.log(querystring.parse('type=iphone11&num=70&ipod=true'))
var qs = querystring.stringify({
type: 'iphone',
num: 140,
ipod: true,
itunes: ' sss '
}, '赠送', '!==', { encodeURIComponent: true })//把特殊的字符转为%形式的
console.log(qs)
Express
搭建一个Express的服务器
- 创建一个目录express-demo
-
npm init - y
把express-demo初始化成一个npm工程; - 创建一个app.js
-
npm install --save express
安装express依赖; - 在app.js里面编写:
var express = require('express')
var app = express()
// 接收来自客户端访问网站根路径的请求
app.get('/', function (req, res, next) {
res.send('测试信息接受成功!')
})
// 监听3000端口,启动服务器
app.listen(3000, function (err) {
if (err) {
console.error(err)
} else {
console.log('express服务器启动成功')
}
})
完成后在终端运行一下,在浏览器输入自己的ip地址后面加上:3000即可访问,简单的服务器完成