zoukankan      html  css  js  c++  java
  • Node.js笔记4


    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():从暂停的状态中恢复。

    Now or nerver .
  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/iyueyao/p/3344446.html
Copyright © 2011-2022 走看看