4. 文件系统 fs

fs模块是文件操作的封装,提供了同步跟异步操作2个版本

* fs.readFile(filename,[encoding],[callback(err,data)]) 是最简单的读取文件的函数
- 必选参数filename
- encoding 是字符编码格式
- 回调函数提供2个参数 err错误 data文件内容
* fs.readFileSync 同步版本的fs.readFile 读取到的文件内容会以函数返回值的形式返回。
* fs.open(path, flags, [mode], [callback(err, fd)])
- ath 路径文件名等
- flags 模式 r r+ rs rs+ w w+ wx wx+ a ax a+ ax+
- mode 用于创建文件时给文件指定权限 默认是 0666
- callback 回调函数 err fd(文件描述符)
文件描述符是一个非负整数,表示操作系统内核为当前进程所维护的打开文件的记录表索引。
* fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)])

**fs 模块函数表**

功  能 异步函数 同步函数

打开文件 fs.open(path,flags, [mode], [callback(err, fd)])
fs.openSync(path, flags, [mode])
关闭文件 fs.close(fd, [callback(err)])
fs.closeSync(fd)
读取文件(文件描述符)
fs.read(fd,buffer,offset,length,position, [callback(err, bytesRead, buffer)])
fs.readSync(fd, buffer, offset, length, position)
写入文件(文件描述符)
fs.write(fd,buffer,offset,length,position, [callback(err, bytesWritten, buffer)])
fs.writeSync(fd, buffer, offset, length, position)
读取文件内容 fs.readFile(filename,[encoding],[callback(err, data)])
fs.readFileSync(filename, [encoding])
写入文件内容 fs.writeFile(filename, data,[encoding], [callback(err)])
fs.writeFileSync(filename, data, [encoding])
删除文件 fs.unlink(path, [callback(err)])
fs.unlinkSync(path)
创建目录 fs.mkdir(path, [mode], [callback(err)])
fs.mkdirSync(path, [mode])
删除目录 fs.rmdir(path, [callback(err)])
fs.rmdirSync(path)
读取目录 fs.readdir(path, [callback(err, files)])
fs.readdirSync(path)
获取真实路径 fs.realpath(path, [callback(err, resolvedPath)])
fs.realpathSync(path)
更名 fs.rename(path1, path2, [callback(err)])
fs.renameSync(path1, path2)
截断 fs.truncate(fd, len, [callback(err)])
fs.truncateSync(fd, len)
更改所有权 fs.chown(path, uid, gid, [callback(err)])
fs.chownSync(path, uid, gid)
更改所有权(文件描述符) fs.fchown(fd, uid, gid, [callback(err)])
fs.fchownSync(fd, uid, gid)
更改所有权(不解析符号链接) fs.lchown(path, uid, gid, [callback(err)])
fs.lchownSync(path, uid, gid)
更改权限 fs.chmod(path, mode, [callback(err)])
fs.chmodSync(path, mode)
更改权限(文件描述符) fs.fchmod(fd, mode, [callback(err)])
fs.fchmodSync(fd, mode)
更改权限(不解析符号链接) fs.lchmod(path, mode, [callback(err)])
fs.lchmodSync(path, mode)
获取文件信息 fs.stat(path, [callback(err, stats)])
fs.statSync(path)
获取文件信息(文件描述符) fs.fstat(fd, [callback(err, stats)])
fs.fstatSync(fd)
获取文件信息(不解析符号链接) fs.lstat(path, [callback(err, stats)])
fs.lstatSync(path)
创建硬链接 fs.link(srcpath, dstpath, [callback(err)])
fs.linkSync(srcpath, dstpath)
创建符号链接 fs.symlink(linkdata, path, [type], [callback(err)])
fs.symlinkSync(linkdata, path, [type])
读取链接 fs.readlink(path, [callback(err, linkString)])
fs.readlinkSync(path)
修改文件时间戳 fs.utimes(path, atime, mtime, [callback (err)])
fs.utimesSync(path, atime, mtime)
修改文件时间戳(文件描述符) fs.futimes(fd, atime, mtime, [callback (err)])
fs.futimesSync(fd, atime, mtime)
同步磁盘缓存 fs.fsync(fd, [callback(err)])
fs.fsyncSync(fd)

**与同步 I/O 函数不同,Node.js 中异步函数大多没有返回值。**
5. HTTP 服务器与客户端

http.Server是一个基于事件的 HTTP 服务器,它的核心由 Node.js 下层 C++ 部分实现,而接口由 JavaScript 封装,兼顾了高性能与简易性。
http.request则是一个 HTTP 客户端工具,用于向 HTTP 服务器发起请求

* http.Server 是一个基于事件的 HTTP 服务器,所有的请求都被封装为独立的事件 .它继承自EventEmitter,提供了以下几个事件。
1. request:当客户端请求到来时,该事件被触发,提供两个参数req和res,分别是http.ServerRequest和http.ServerResponse的实例,表示请求和响应信息。
2. connection:当 TCP 连接建立时,该事件被触发,提供一个参数socket,为net.Socket的实例。connection事件的粒度要大于 request,因为客户端在 Keep-Alive 模式下可能会在同一个连接内发送多次请求。
3. close:当服务器关闭时,该事件被触发。注意不是在用户连接断开时。
* http.ServerRequest

ServerRequest 的属性
- complete 客户端请求是否已经发送完成
- httpVersion HTTP 协议版本,通常是 1.0 或 1.1
- method HTTP 请求方法,如 GET、POST、PUT、DELETE 等
- url 原始的请求路径,例如 /static/image/x.jpg 或 /user?name=byvoid
- headers HTTP 请求头
- trailers HTTP 请求尾(不常见)
- connection 当前 HTTP 连接套接字,为 net.Socket 的实例
- socket connection 属性的别名
- client client 属性的别名

**http.ServerRequest 提供了以下3个事件用于控制请求体传输**
- data:当请求体数据到来时,该事件被触发。该事件提供一个参数chunk,表示接收到的数据。如果该事件没有被监听,那么请求体将会被抛弃。该事件可能会被调用多次
- end:当请求体数据传输完成时,该事件被触发,此后将不会再有数据到来。
- close: 用户当前请求结束时,该事件被触发。不同于end,如果用户强制终止了传输,也还是调用close
* 获取GET请求内容

**util.inspect(url.parse(req.url, true))**
通过url.parse,原始的req.url被解析为一个对象,其中query就是我们所谓的 GET 请求的内容,而路径则是pathname

请求路径为:http://127.0.0.1:3000/url?a=2&b=3
得到的解析对象:
{ protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: '?a=2&b=3',
query: { a: '2', b: '3' },
pathname: '/url',
path: '/url?a=2&b=3',
href: '/url?a=2&b=3' }
* 获取 POST 请求内容

POST 请求的内容全部都在请求体中,恶意的 POST 请求会大大消耗服务器的资源。所以 Node.js 默认是不会解析请求体的,当你需要的时候,需要手动来做

* http.ServerResponse

http.ServerResponse是返回给客户端的信息,决定了用户最终能看到的结果。

http.ServerResponse有三个重要的成员函数,用于返回响应头、响应内容以及结束请求。
* response.writeHead(statusCode, [headers]) statusCode是 HTTP 状态码 headers是响应头的每个属性
* response.write(data, [encoding]) data是一个Buffer或字符串,表示要发送的内容 如果data是字符串,那么需要指定encoding来说明它的编码方式,默认是 utf-8
* response.end([data], [encoding])

* HTTP 客户端

http模块提供了两个函数http.request和http.get,功能是作为客户端向 HTTP 服务器发起请求。

* http.request(options, callback)发起 HTTP 请求

http.get(options, callback) 是一个更加简便的方法用于处理GET请求的方法

* http.ClientRequest 是由http.request或http.get返回产生的对象

它提供一个 response 事件,即 http.request 或 http.get 第二个参数指定的回调函数的绑定对象
* http.ClientResponse

提供了三个事件 data、end 和 close,分别在数据到达、传输结束和连接结束时触发,其中 data 事件传递一个参数 chunk,表示接收到的数据。

ClientResponse 的属性:
- statusCode HTTP 状态码,如 200、404、500
- httpVersion HTTP 协议版本,通常是 1.0 或 1.1
- headers HTTP 请求头
- trailers HTTP 请求尾(不常见)
ClientResponse 还提供了以下几个特殊的函数:
- response.setEncoding([encoding]):设置默认的编码
- response.pause() :暂停接收数据和发送事件,方便实现下载功能。
- response.resume():从暂停的状态中恢复。

Node.js笔记4的更多相关文章

  1. Node.js笔记1

    Node.js入门笔记 1. node -help 可以显示帮助信息2. node REPL 模式(Read-eval-print loop) 输入—求值—输出循环 直接在cmd输入node 可以进入 ...

  2. node.js 笔记

    教程总结笔记: 学习网站:http://www.runoob.com/nodejs/nodejs-install-setup.html Node.js 中文网及安装文件下载: http://nodej ...

  3. Node.js 笔记02

    一.关于命令 常用命令: dir 列出当前目录下面所有的文件 cd 目录名 进入到指定的目录,. 当前目录, .. 进入上级目录,cd . 当前目录, cd .. 上级目录 md 目录名 创建文件夹 ...

  4. node.js 笔记(一)

    参考:https://github.com/alsotang/node-lessons 感谢!!! 本文属于小白入门级笔记,请大牛自动屏蔽!!! 1.     开发环境 os: 10.12.6 nod ...

  5. 学习Node.js笔记(一)

    一.什么是Node.js 1.1.Node.js是什么 Node.js是用来编写高性能网络服务器的JavaScript工具包 Node.js 是一个基于Chrome JavaScript 运行时建立的 ...

  6. node.js笔记

    在node环境上面运行js代码,js相当于php,node相当于apache环境 第一步装 node 环境1.从官网下载 dmg 文件安装2.通过命令行安装 需要用到 homebrew(mac上专门用 ...

  7. Node.js笔记3

    ###Node.js核心模块 1. 全局对象 Node.js中能够访问到的都是global的属性 **process它用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口.** ...

  8. Node.js笔记2

    入门二 5. 事件 Node.js中所有的异步I/O操作完成时都会发送一个事件到事件队列. Events 事件模块 `events.EventEmitter` 简单用法: var EventEmitt ...

  9. node.js 笔记一

    现在地址:http://nodejs.org/download/ 我的机器是windows的,选择的文件是,是编译后的版本:Windows Installer (.msi)  32-bit examp ...

随机推荐

  1. Linux 网络编程基础(4) -- Ping 的C代码实现

    1.背景 在进行网络编程的时候,通常使用的协议有TCP协议,UDP协议.这些协议在简历套接字之初需要制定套接字的类型,比如TCP应当设置为 SOCK_STREAM, UDP对应的套接字应当设置为SOC ...

  2. android 环境搭建 windows, linux

    android环境也搭建了很多次了,linux下window下.在这里记录下,以后再搭建设置变量啥的就直接看自己的博客就好了.电子挡笔记有时候也不方便 1.下载材料 概述:用的是比较简单的方式搭建环境 ...

  3. 透明窗口(窗口上面文字图片等内容不透明)的实现(使用SetLayeredWindowAttributes API函数)

    透明窗口(窗口上面文字图片等内容不透明)的实现 本文讨论通过SetLayeredWindowAttributes来实现本文的目的. SetLayeredWindowAttributes的实现必须将窗口 ...

  4. poj2262---素数(质数)的判断

    收获:一开始以为是100万的所有数字,题目要求是只要偶数,也可以分析出来,如果是给一个奇数,当我们给他大于等于3的奇数(这个数加有可能不是质数,但至少满足是奇数,至于是不是质数还要自己判断),剪出来一 ...

  5. 一些复数运算的C语言实现

    很久不写博客了.第一次写博客是在04年,最近的一次还是在大学时,在学校时,甚至还有过自己去买虚拟主机搭WordPress写博客的经历.现在工作时间越长,越发现积累的重要性.那么就从这里开始吧,重新开始 ...

  6. js原生forEach、map与jquery的each、$.each的区别

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  7. html---textarea初始化时就有个table空格以及tab键操作无效

    1 初始化时就有一个tab空格 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRnJlZUFwZQ==/font/5a6L5L2T/fontsize/400 ...

  8. 复习一下sql server的inner join left join 和right join

    1.left join sql语句如下: select * from A left join B  on A.aID = B.bID 结果如下:aID               aNum       ...

  9. WebService:The remote server returned an error: (400) Bad Request

    开发工具:VS2010.开发组件:WebService.运行环境:Windows 今天一个同事在进行计费接口联调试时,发现了一个非常奇怪的问题:接口在家里环境测试,一切正常,但是部署到现网环境之后,连 ...

  10. .net 资源

    基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.net和C#.net通用权限系统组件功能教程 http://down.51cto.com/zt/1 ...