【nodejs】常用模块

nodejs常用模块

常用内置模块

path 路径管理

用于处理和转换文件路径的工具集,用于处理目录的对象

  1. 格式化路径. 将不符合规范的路径经过格式化转换为标准路径,解析路径中的.与…外,还能去掉多余的斜杠
    path.normalize(’/path///normalize/hi/…’);
    结果如: ‘/path/normalize/’
    标准化之后的路径里的斜杠在Windows系统下是\,而在Linux系统下是/
  2. 组合路径
    path.join(’///you’, ‘/are’, ‘//beautiful’);
    结果如: ‘/you/are/beautiful’
  3. 获取绝对路径
    path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
    结果如: ‘/home/myself/node/wwwroot/static_files/gif/image.gif’
  4. 获取相对路径
    path.relative()
  5. 返回路径中的目录名
    path.dirname(’/foo/strong/cool/nice’);
    结果如: ‘/foo/strong/cool’
  6. 返回路径最后一部分,还可以排除指定字符串
    path.basename(’/foo/strong/basename/index.html’);
    path.basename(’/foo/strong/basename/index.html’,’.html’);
    结果如: index.html 和 index
  7. 返回路径后缀
    path.extname(‘index.html’);
    结果如: .html

fs (文件管理)

fs 模块提供了异步和同步2个版本 fs.readFile() fs.readFileSync()

  1. 写入文件内容
    fs.writeFile(‘test.txt’, ‘Hello Node’ , [encoding], [callback]);
  2. 追加写入
    fs.appendFile(‘test.txt’,‘Hello Node’,[encoding],[callback]);
  3. 文件是否存在
    fs.exists(‘test.txt’,[callback]);
  4. 修改文件名
    fs.rename(旧文件,新文件,[callback]);
  5. 移动文件. 没有专门函数,通过修改文件名可以达到目的
    fs.rename(oldPath,newPath,[callback]);
  6. 读取文件内容
    fs.readFile(‘test.txt’, [encoding], [callback]);
  7. 删除文件
    fs.unlink(‘test.txt’, [callback]);
  8. 创建目录
    fs.mkdir(路径, 权限, [callback]);
    路径:新创建的目录。
    权限:可选参数,只在linux下有效,表示目录的权限,默认为0777,表示文件所有者、文件所有者所在的组的*用户、*所有用户,都有权限进行读、写、执行的操作。
  9. 删除目录
    fs.rmdir(path, [callback]);
  10. 读取目录. 读取到指定目录下所有的文件
    fs.readdir(path, [callback]);
  11. 打开文件
    fs.open(path,flags, [mode], [callback(err,fd)])
  12. 关闭文件
    fs.close(fd, [callback(err)])
    fd 是打开文件后的标示符
  13. 读取文件
    fs.read(fd,buffer,offset,length,position,[callback(err, bytesRead, buffer)])
  14. 写入文件
    fs.writeFile(filename, data,[encoding],[callback(err)])
  15. 获取真实路径
    fs.realpath(path, [callback(err,resolvedPath)])
  16. 更改所有权
    fs.chown(path, uid, gid, [callback(err)])
  17. 更改权限
    fs.fchmod(fd, mode, [callback(err)])
  18. 获取文件信息
    fs.stat(path, [callback(err, stats)])
  19. 创建硬链接
    fs.link(srcpath, dstpath, [callback(err)])
  20. 读取链接
    fs.readlink(path, [callback(err,linkString)])
  21. 修改文件时间戳
    fs.utimes(path, atime, mtime, [callback(err)])
  22. 同步磁盘缓存
    fs.fsync(fd, [callback(err)])

url 文件管理

  • 解析url,返回一个json格式的数组
    url.parse(‘http://www.baidu.com’);
    结果:
{ protocol: ‘http:’,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: null,
query: null,
pathname: ‘www.baidu.com’,
path: ‘www.baidu.com’,
href: ‘http://www.baidu.com’ }
  • 解析url - 条件解析
    url.parse(‘http://www.baidu.com?page=1’,true);
    结果:
{ protocol: ‘http:’,
slashes: true,
auth: null,
host: ‘www.baidu.com’,
port: null,
hostname: ‘www.baidu.com’,
hash: null,
search: ‘?page=1’,
query: { page: ‘1’ },
pathname: ‘/’,
path: ‘/?page=1’,
href: ‘http://www.baidu.com/?page=1’ }
  • 解析主机
    url.parse(‘http://www.baidu.com/news’,false,true);
    结果:
{ protocol: ‘http:’,
slashes: true,
auth: null,
host: ‘www.baidu.com’,
port: null,
hostname: ‘www.baidu.com’,
hash: null,
search: null,
query: null,
pathname: ‘/news’,
path: ‘/news’,
href: ‘http://www.baidu.com/news’ }
  • 格式化为url. 将json数组逆向成url
url.format({
protocol: ‘http:’,
hostname:‘www.baidu.com’,
port:‘80’,
pathname :’/news’,
query:{page:1}
});

结果如: http://www.baidu.com/news?page=1

  • 封装路径
 url.resolve(‘http://example.com/’, ‘/one’)  // 'http://example.com/one’
url.resolve(‘http://example.com/one’, ‘/two’) // ‘http://example.com/two’

###Query String 字符串转换
用于实现URL参数字符串与参数对象之间的互相转换

  1. 序列化对象.将对象类型转换成一个字符串类型(默认的分割符(“&”)和分配符(“=”))
    querystring.stringify({foo:‘bar’,cool:[‘xux’, ‘yys’]});
    结果如: foo=bar&cool=xux&cool=yys
    重载1:querystring.stringify({foo:‘bar’,cool:[‘xux’, ‘yys’]},’*’,’$’);
    结果如: foo b a r ∗ c o o l bar*cool barcoolxux*cool$yys
  2. 反序列化
    querystring.parse(‘foo@bar$cool@xux$cool@yys’,’@’,’$’);
    结果如: { foo: ‘bar’ , cool: [‘xux’, ‘yys’] }

util 使用工具

提供常用函数的集合,用于弥补核心JavaScript的一些功能过于精简的不足。并且还提供了一系列常用工具,用来对数据的输出和验

  1. 任意对象转化为字符串,用于调试输出
    util.inspect(object,[showHidden],[depth],[colors])
  2. 格式化字符串. 就像c语言的 printf函数
    支持的占位符有:“%s(字符串)”、“%d(数字<整型和浮点型>)”、“%j(JSON)”、“%(单独一个百分号则不作为一个参数)”
    util.format(’%s:%s’, ‘foo’);
    结果如: foo:%s
    util.format(’%s:%s’, ‘foo’, ‘bar’, ‘baz’);
    结果如: foo:bar baz 额外的参数将会调用util.inspect()转换为字符串连接在一起
    util.format(1, 2, 3);
    结果如: 1 2 3 , 第一个参数是一个非格式化字符串,则会把所有的参数转成字符串并以空格隔开拼接在一块
  3. 验证函数
    util.isArray(object);
    判断对象是否为数组类型,是则返回ture,否则为false
    util.isDate(object);
    判断对象是否为日期类型,是则返回ture,否则返回false
    util.isRegExp(object);
    判断对象是否为正则类型,是则返回ture,否则返回false
    util.isArray()、util.isRegExp()、util.isDate()、util.isError() util.format()、util. debug()
  4. 继承
    util.inherits( 子类, 基类)
    实现对象间原型继承

os 系统基本信息

os模块可提供操作系统的一些基本信息

  1. 返回系统临时目录
    os.tmpdir()
    结果如: C:\Users\ADMINI~1\AppData\Local\Temp
  2. 返回 CPU 的字节序,可能的是 “BE” 或 “LE”
    os.endianness()
    结果如: LE (inter i3)
  3. 返回操作系统的主机名
    os.hostname()
    结果如: QH-20141006HJKT
  4. 返回操作系统名称
    os.type()
    结果如: Windows_NT
  5. 返回操作系统平台
    os.platform()
    结果如: win32
  6. 返回操作系统 CPU 架构,可能的值有 “x64”、“arm” 和 “ia32”
    os.arch()
    结果如: x64
  7. 返回操作系统的发行版本
    os.release()
    结果如: 6.1.7601
  8. 返回操作系统运行的时间,以秒为单位
    os.uptime()
    结果如: 7847.6797442
  9. 返回一个包含 1、5、15 分钟平均负载的数组
    os.loadavg()
    结果如: 6.1.7601
  10. 返回系统内存总量,单位为字节
    os.totalmem()
    结果如: 3931602944
    11 .返回操作系统空闲内存量,单位是字节
    os.freemem()
    结果如: 1307422720
  11. 返回一个对象数组,包含所安装的每个 CPU/内核的信息:型号、速度(单位 MHz)、时间(一个包含 user、nice、sys、idle 和 irq 所使用 CPU/内核毫秒数的对象)
    os.cpus()
  12. 获取网络接口的一个列表信息
    os.networkInterfaces()
    结果如: 1307422720
  13. 一个定义了操作系统的一行结束的标识的常量
    os.EOL

process 进程管理

process 是一个全局变量.无需 require;
1.返回应用程序当前目录
process.cwd()
结果如: c:\Users\Administrator\MongoDb_Test
2.改变应用程序目录
process.chdir(“目录”)
3.标准输出流.将内容打印到输出设备上.console.log就是封装了它
process.stdout.write(‘aa\n’)
结果如: aa
4.标准错误流
process.stderr.write(‘aa\n’)
结果如: aa
5.进程的输入流. 通过注册事件的方式来获取输入的内容
process.stdin.on(‘readable’, function() { var chunk = process.stdin.read(); if (chunk !== null) { process.stdout.write('data: ’ + chunk); } });
6.结束进程
process.exit(code);
参数code为退出后返回的代码,如果省略则默认返回0
7.注册事件
process.stdout.on(‘data’,function(data){ console.log(data);
});
8.为事件循环设置一项任务,Node.js 会在下次事件循环调响应时调用 callback
process.nextTick(callback)
8.设置编码, 默认 utf8. node.js编码格式只支持UTF8、ascii、base64,暂时不支持GBK、gb2312
process.stdin.setEncoding(编码);
process.stdout.setEncoding(编码);
process.stderr.setEncoding(编码);

常用其他模块

express

morgan

HTTP 请求 logger 中间件

var express = require('express');
var app = express();
var logger = require('morgan');

app.use(logger('dev'));

body-parser

可以通过body-parser 对象创建中间件,当接收到客户端请求时所有的中间件都会给req.body 添加属性,请求体为空,则解析为空{} (或者出现错误)。

var express = require('express')
var bodyParser = require('body-parser')
 
var app = express()
 
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
 
// parse application/json
app.use(bodyParser.json())

###cookie-parser
解析cookie放入req.cookies

var express      = require('express')
var cookieParser = require('cookie-parser')
 
var app = express()
app.use(cookieParser())

app.get('/', function(req, res) {
  console.log('Cookies: ', req.cookies)
})

serve-favicon

服务网站图标,nodejs中间件

var express = require('express')
var favicon = require('serve-favicon')
var path = require('path')
 
var app = express()
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')))

underscore

是一个JS工具库,主要提供了对数组,对象,函数等一些基础工具函数,可以同时在浏览器和NodeJS环境中运行。建议在每个项目中使用。

moment

是一个日期工具库,主要提供了对日期的解析,验证,操作和格式化等,如果需要对日期作较多的操作或比较复杂的操作,则它是一个不错的选择,毕竟JS自带的Date功能太弱了。

Connect

是一系列的中间件的集合,包括日志,session, cookie, body parser等,它做了大量HTTP相关的基础性的工作,Express框架就依赖它进行工作的。

单元测试

Mocha,Karma,Jasmine

部署

forever,p2m,supervisor

Web Socket - Socket.IO

NodeJS的一个主要优点是高并发,因此NodeJS是Web Socket服务器的理想选择,而Socket.IO则Socket模块的不二选择,可以用于构建聊天室、客服系统等。Socket.IO不仅提供了服务 器端代码,还提供了前端JS代码,可以非常方便的进行Web Socket开发,同时它兼容那些不支持Web Socket的浏览器。

日志管理 - Log4js

类似于JAVA中的log4j,具有coloured console logging、可以设置输出等级等功能,简单易用,如果没有复杂需求足够使用了。winston是一个功能更强大也更复杂的日志模块,人气比较高,对功能有追求的可以看看这个模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值