node常用的模块(四)

var url = require(‘url’);

var a = url.resolve(‘/one/two/three’, ‘four’) ,

b = url.resolve(‘http://example.com/’, ‘/one’),

c = url.resolve(‘http://example.com/one’, ‘/two’);

console.log(a +“,”+ b +“,”+ c);

//输出结果:

///one/two/four

//http://example.com/one

//http://example.com/two

  1. fs 文件模块

文件写入

Node中文件读取的方式主要有:

  1. fs.readFile(file[, options], callback(error, data))

fs.readFile(‘c:\demo\1.txt’, ‘utf8’, (err, data) => {

if (err) throw err;

console.log(data);

});

  1. fs.readFileSync(file[, options])

try {

const data = fs.readFileSync(‘c:\demo\1.txt’, ‘utf8’);

console.log(data);

} catch(e) {

// 文件不存在,或者权限错误

throw e;

}

  1. fs.createReadStream(path[, options])

const stream = fs.createReadStream(‘c:\demo\1.txt’);

let data = ‘’

stream.on(‘data’, (trunk) => {

data += trunk;

});

stream.on(‘end’, () => {

console.log(data);

});

文件写入

Node中文件写入的方式主要有:

  1. fs.writeFile(file, data[, options], callback(error))

fs.writeFile(‘c:\demo\a.txt’, new Date(), (error) => {

console.log(error);

});

  1. fs.writeFileSync(file, data[, options])

try {

fs.writeFileSync(‘c:\demo\a.txt’, new Date());

} catch (error) {

// 文件夹不存在,或者权限错误

console.log(error);

}

  1. fs.createWriteStream(path[,option])

var streamWriter = fs.createWriteStream(‘c:\demo\a.txt’);

setInterval(() => {

streamWriter.write(${new Date}\n, (error) => {

console.log(error);

});

}, 1000);

  1. path模块

  2. path.basename(path[, ext])

  • path路径

  • ext可选的文件扩展名

  • path.basename() 方法返回一个 path 的最后一部分

path.basename(‘/foo/bar/baz/asdf/quux.html’);

// 返回: ‘quux.html’

path.basename(‘/foo/bar/baz/asdf/quux.html’, ‘.html’);

// 返回: ‘quux’

  1. path.dirname(path)
  • path.dirname() 方法返回一个 path 的目录名

path.dirname(‘/foo/bar/baz/asdf/quux’);

// 返回: ‘/foo/bar/baz/asdf’

如果 path 不是一个字符串,则抛出 TypeError。

注意:只能返回目录名,并不能返回目录的详细信息

  1. path.extname(path)

path.extname() 方法返回 path 的扩展名

path.extname(‘index.html’);

// 返回: ‘.html’

path.extname(‘index.coffee.md’);

// 返回: ‘.md’

path.extname(‘index.’);

// 返回: ‘.’

path.extname(‘index’);

// 返回: ‘’

path.extname(‘.index’);

// 返回: ‘’

  1. path.join([...paths])

path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。

path.join(‘/foo’, ‘bar’, ‘baz/asdf’, ‘quux’, ‘…’);

// 返回: ‘/foo/bar/baz/asdf’

path.join(‘foo’, {}, ‘bar’);

// 抛出 ‘TypeError: Path must be a string. Received {}’

  1. path.normalize(path)

path.normalize() 方法会规范化给定的 path,并解析 ‘…’ 和 ‘.’ 片段

  1. path.parse(path)

path.parse() 方法返回一个对象,对象的属性表示 path 的元素。 尾部文件分隔符会被忽略

返回的对象有以下属性

dir

root

base

name

ext

path.parse(‘C:\path\dir\file.txt’);

// 返回:

// { root: ‘C:\’,

// dir: ‘C:\path\dir’,

// base: ‘file.txt’,

// ext: ‘.txt’,

// name: ‘file’ }

  1. QueryString 参数处理

  2. querystring.escape(str)

  3. querystring.unescape(str)

  4. querystring.parse(str[, sep[, eq[, options]]])

  5. querystring.stringify(obj[, sep[, eq[, options]]])

queryString用于解析与格式化 URL 查询字符串

方法一:querystring.escape(str)

对给定的 str 进行 URL 编码。

方法二:querystring.unescape(str)

对给定的 str 进行 URL 解码。

方法三:querystring.stringify(obj[, sep[, eq[, options]]])

将对象转化成字符串

sep 第二个参数 用于界定查询字符串中的键值对的子字符串。默认为 ‘&’。

eq 第三个参数 用于界定查询字符串中的键与值的子字符串。默认为 ‘=’。

options

encodeURIComponent 把对象中的字符转换成查询字符串时使用的函数。默认为 querystring.escape()。该方法通过遍历给定的 obj 对象的自身属性,生成 URL 查询字符串。

// 假设存在 gbkEncodeURIComponent 函数。

querystring.stringify({ w: ‘中文’, foo: ‘bar’ }, null, null,

{ encodeURIComponent: gbkEncodeURIComponent });

方法四:querystring.parse(str[, sep[, eq[, options]]])

将query字符串装华为对象

sep 第二个参数 用于界定查询字符串中的键值对的子字符串。默认为 ‘&’。

eq 第三个参数 用于界定查询字符串中的键与值的子字符串。默认为 ‘=’。

options

decodeURIComponent 解码查询字符串的字符时使用的函数。默认为 querystring.unescape()。

maxKeys 指定要解析的键的最大数量。指定为 0 则不限制。默认为 1000。

  1. HTTP 模块概要

http.createServer([options][, requestListener])

2. node中的异步和同步


fs模块对文件的几乎所有操作都有同步和异步两种形式

例如:readFile() 和 readFileSync()

区别:

同步调用会阻塞代码的执行,异步则不会

异步调用会将读取任务下达到任务队列,直到任务执行完成才会回调

异常处理方面,同步必须使用 try catch 方式,异步可以通过回调函数的第一个参数

var fs=require(‘fs’)

console.time(‘sync’);

try {

var data = fs.readFileSync(‘./c.txt’);

console.log(data);

} catch (error) {

throw error;

}

console.timeEnd(‘sync’);

console.time(‘async’);

fs.readFile(‘./c.txt’,(error, data) => {

if (error) throw error;

console.log(data);

});

console.timeEnd(‘async’);

3.自己写一个node服务器


  1. 普通静态资源服务器

var http=require(‘http’);

//文件模块 操作文件 读取文件,写入文件

var fs=require(‘fs’);

function read(str,res){

fs.readFile(str,function(err,data){

if(!err){

res.write(data);

res.end();

}

})

}

var server=http.createServer(function(req,res){ // /img/2.gif

//接受请求, 做出应有

console.log(req.url);//请求路径 端口后面的,参数前面的 / /favicon.ico

if(req.url==‘/’){

read(‘./index.html’,res);

}else if(req.url==‘/favicon.ico’){

read(‘./img/ico.png’,res);

}else{

read(‘.’+req.url,res); // read(‘.’+‘/img/2.gif’,res)

}

});

//三个参数, 参数一:端口号(取值范围:0-65535,0-1024系统保留端口,80端口可以省略)

//参数二:域名(ip)

//参数三:回调函数

server.listen(3001,‘127.0.0.1’,function(err){

//err 错误对象参数 err–>null err—>{error:xxx}

if(!err){//正确

console.log(‘服务器成功运行在127.0.0.1:3000上’)

}

})

  1. 带登录接口的服务器
  • index.html文件

用户名:

密码:

登录

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-6f1QD6Yt-1715577747320)]

[外链图片转存中…(img-KYAzqiRg-1715577747320)]

[外链图片转存中…(img-SHE9bWhy-1715577747320)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值