Node.js常用内置模块

常用的内置模块(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模块主要提供了两个模块:
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的服务器
  1. 创建一个目录express-demo
  2. npm init - y把express-demo初始化成一个npm工程;
  3. 创建一个app.js
  4. npm install --save express安装express依赖;
  5. 在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即可访问,简单的服务器完成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342