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())
-
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.appendFile
和fs.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提供了request
和response
对象,用来处理数据请求和响应
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')
})
-
Url.parse有两个常用属性
Pathname
获取文件路径的字符串,以/开头,不包括参数query
获取参数,如果在转化是,parse方法的第二个参数传递为true,自动将传递的参数转变为对象格式
get
引入url模块
var url=require("url");
url.parse(urlString[, parseQueryString])
urlString 前端发送的请求地址
parseQueryString 处理query ,如果为true ,则把它处理为对象。如果为false,则不进行处理,依旧是字符串。
示例:
前端给服务器发送请求
后端进行处理
var http=require('http');
var url=require("url");
http.createServer((req,res)=>{
//req.url 接收的地址
console.log(url.parse(req.url,true))
}).listen(8080)
处理的地址: