• 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 .
  • 相关阅读:
    mysql 5.7修改密码
    使用zfs进行pg的pitr恢复测试
    什么是构造函数?它和普通函数的区别?
    匿名函数和普通函数的区别
    http缓存机制
    全局变量和局部变量
    什么是web语义化?
    ajax状态值和状态码
    如何理解MVVM?
    如果理解&&运算符和各类数值的布尔值
  • 原文地址:https://www.cnblogs.com/iyueyao/p/3344446.html
Copyright © 2020-2023  润新知