Node | 基本模块

NodeJS常用内置模块

Process

表示当前进程,常用的属性和方法

  • process.env 环境变量
  • process.version 当前node.js版本
  • process.versions 依赖库的版本号
  • process.platform 运行平台
  • process.arch CPU架构
  • process.cwd(),当前工作目录
// console.log(process)
// console.log('环境变量信息', process.env)
console.log('当前node版本信息',process.version) 
console.log('依赖库的版本号',process.versions) 
console.log('运行平台',process.platform) 
console.log('CPU架构', process.arch) 
console.log('当前工作目录', process.cwd())

image.png
  • Node也是事件驱动的单线程模型,可以通过nextTick nextTick方法用于将一个函数推迟到代码中所书写的下一个同步方法执行完毕或异步方法的回调函数开始执行前调用。

    console.log(1);
    setTimeout(() => {
      console.log(5)
    })
    process.nextTick(() => {
        console.log(3);
    });
    process.nextTick(() => {
        console.log(4);
    });
    setTimeout(() => {
      console.log(6)
    })
    console.log(2);
    
    // 执行结果是 1 2 3 4 5 6 
    //先执行同步事件,然后执行nextTick中的回调,最后才会执行定时器中的回调
    
  • 使用process不需要引入

fs 文件读写

fs模块提供了异步与同步的读写文件功能。

  • 异步就是指 执行I/O操作时,不需要等待,在回调函数中进行操作,继续执行后续代码。

  • 同步就是指 当遇到I/O操作时,会等到操作完成后, 才继续往后执行代码。

  • 使用fs模块,需要先引入 const fs = require('fs')

1、异步读取文件

fs.readFile(path [, options], callback)

  • path 第一个参数指定读取的文件
  • opations 第二个参数可选,指定文件的编码
  • callback 第三个参数指定回调,回调中接收两个参数,第一个参数是发生错误时候的错误对象,如果不发生错误,那么对应的值为null, 第二个参数是读取到的文件内容。

当不传入第二个参数,指定文件的编码时,返回的是Buffer对象(一个包含0或多个字节的数组,但和Array不同)

  • 可以把Buffer对象转为string buffer.toString('utf-8')
  • 也可以把字符串转成Buffer对象 new Buffer(text, 'utf-8')
// 引入fs模块
const fs = require('fs')
// 未指定编码格式
fs.readFile('./index.js', (err, data) => {
    console.log('err',err)
    console.log('data',data)
    console.log('data', data.toString())
})
// 指定编码格式
fs.readFile('./index.js', 'utf-8',(err, data) => {
    console.log('err',err)
    console.log('data',data)
})

2、异步写文件

fs.writeFile(path, data[,options] callback)

  • Path 文件路径。 如果指定的文件不存在,会自动创建一个文件,并将内容写入
  • data 要写入的内容, 如果传入的data是String,那么默认以UTF-8编码写入文件,如果传入的是Buffer对象,那么以二进制形式写入文件
  • Callback 文件写入完成之后执行的回调函数,有一个参数是发生错误时的错误对象,如果不发生错误,那么对应的值为null
// 引入fs模块
const fs = require('fs')

fs.writeFile('./index1.js', 'Hello World','utf-8', (err) => {
    console.log(err)
})

3、同步读取文件

fs.readFileSync(path[, options]) 同步读写不接受回调函数,如果需要处理异常,可以使用try/catch实现效果

// 引入fs模块
const fs = require('fs')

try {
    fs.readFileSync('./index.js','utf-8')
}
catch(err) {
    console.log(err)
}


4、同步写文件

fs.writeFileSync(path, data[, fileEncoding])

多次写入文件, 最后一次操作会覆盖之前写入的内容。

// 引入fs模块
const fs = require('fs')

fs.writeFileSync('./index.js', 'test', 'utf-8')
fs.writeFileSync('./index.js', 'test1', 'utf-8')
fs.writeFileSync('./index.js', 'test2', 'utf-8')

5、同异步追加内容

fs.appendFilefs.appendFileSync可以向文件中追加内容

path 路径

1、path.basename(path[, ext])获取一个路径中的文件名

2、path.dirname(path[, ext])获取一个路径中的目录文件夹名

3、path.extname获取一个路径中的文件扩展名

const path = require('path')
console.log("basename",path.basename('./test/index.js')) // index.js
console.log("dirname",path.dirname('./test/index.js'))  // ./test
console.log("extname",path.extname('./test/index.js')) // .js

4、path.resolve() 根据当前文件所在目录,解析出绝对路径

可以传递多个参数,从后向前进行拼接。

  • 若字符以 / 开头,不会拼接到前面的路径(因为拼接到此已经是一个绝对路径);

  • 若以 ../ 开头,拼接前面的路径,且不含最后一节路径;

  • 若以 ./ 开头 或者没有符号 则拼接前面路径;

var path = require("path")     //引入node的path模块

path.resolve('/foo/bar', './baz')   // returns '/foo/bar/baz'
path.resolve('/foo/bar', 'baz')   // returns '/foo/bar/baz'
path.resolve('/foo/bar', '/baz')   // returns '/baz'
path.resolve('/foo/bar', '../baz')   // returns '/foo/baz'
path.resolve('home','/foo/bar', '../baz')   // returns '/foo/baz'
path.resolve('home','./foo/bar', '../baz')   // returns '/home/foo/baz'
path.resolve('home','foo/bar', '../baz')   // returns '/home/foo/baz'

如果在处理完所有给定的 path 片段之后还未生成绝对路径,则再加上当前工作目录

http 模块

Nodejs提供了requestresponse对象,用来处理数据请求和响应

  • request对象封装了http请求
  • response对象封装了http响应

1、引入http模块

2、创建http服务器

3、监听端口号

4、启动本地服务器 node xx.js

5、浏览器访问 localhost:port

const http = require('http')
const server =  http.createServer((request, response) => {
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.end("This is a server by Node.js");
});
server.listen('3000',() => {
    console.log('3000 port is linsening')
})

url 模块

url一般是结合http模块一起使用, 对请求地址进行处理

  • url.parse(req.url)把一个完整的url地址分解为一个对象
const http = require('http')
const url = require('url')
const server =  http.createServer((req, res) => {
    // 由于在通过chrome浏览器的方式在进行访问时,每次访问都会默认附带一次/favicon.ico的请求、可以添加判断
     if(req.url == '/favicon.ico'){
        return;
    };
      console.log('req.url', req.url)
      // url.parse解析
      let urlParse = url.parse(req.url)
      console.log('urlParse',urlParse )
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end("This is a server by Node.js");
  
});
server.listen('3000',() => {
    console.log('3000 port is linsening')
})
image.png
  • Url.parse有两个常用属性

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