Nodejs经常使用模块

1.fs模块

概念:fs模块是文件操做模块,fs是 FileSystem的简写。它用来对文件,文件夹进行操做。javascript

// 引入模块。
// 可使用var、let,可是建议使用const,由于咱们不但愿它被改变
const fs = require('fs');
复制代码

全部的文件操做系统都是具备同步和异步的形式:html

  • 异步的形式老是将完成回调做为其最后一个参数,传给完成回到的参数取决于具体的方法,可是第一个参数始终预留用于异常,若是操做成功,则第一个参数将为null或者是undefined
const fs = require('fs');
    
    fs.unlink('/tmp/hello', (err) => {
      if (err) throw err;
      console.log('已成功删除 /tmp/hello');
    });
复制代码
  • 使用同步的操做发生的异常会当即抛出,可使用 try…catch 处理,也能够容许冒泡。
const fs = require('fs');
    
    try {
      fs.unlinkSync('/tmp/hello');
      console.log('已成功删除 /tmp/hello');
    } catch (err) {
      // 处理错误
    }
复制代码
  • 使用异步的方法时没法保证顺序。 所以,如下的操做容易出错,由于 fs.stat() 操做可能在 fs.rename() 操做以前完成:
fs.rename('/tmp/hello', '/tmp/world', (err) => {
      if (err) throw err;
      console.log('重命名完成');
    });
    fs.stat('/tmp/world', (err, stats) => {
      if (err) throw err;
      console.log(`文件属性: ${JSON.stringify(stats)}`);
    });
复制代码
  • 要正确地排序这些操做,则将 fs.stat() 调用移动到 fs.rename() 操做的回调中:
fs.rename('/tmp/hello', '/tmp/world', (err) => {
      if (err) throw err;
      fs.stat('/tmp/world', (err, stats) => {
        if (err) throw err;
        console.log(`文件属性: ${JSON.stringify(stats)}`);
      });
    });

复制代码
  • 在繁忙的进程中,强烈建议使用这些调用的异步版本。 同步的版本将阻塞整个进程,直到它们完成(中止全部链接)。
  • 虽然不推荐这样使用,但大多数 fs 函数容许省略回调参数,在这种状况下,使用一个会从新抛出错误的默认回调。 要获取原始调用点的跟踪,则设置 NODE_DEBUG 环境变量:不推荐在异步的 fs 函数上省略回调函数,由于可能致使未来抛出错误
$ cat script.js
    function bad() {
      require('fs').readFile('/');
    }
    bad();
    
    $ env NODE_DEBUG=fs node script.js
    fs.js:88
            throw backtrace;
            ^
    Error: EISDIR: illegal operation on a directory, read
        <stack trace.>
复制代码

文件内容读取-readFile

异步格式:java

fs.readFile('文件路径'[,选项], (err, data) => {
      if (err) throw err;
      console.log(data);
    });

复制代码

说明:node

  • 第一个参数:文件路径。 相对路径和绝对路径都可。
  • 第二个参数: 配置项,可选参数。主要用来配置字符集。通常可设置为'utf8'
  • 若是不设置该参数,文件内容会以二进制形式返回。
  • 参数3: 读取完成后触发的回调函数。有两个参数 --- err 和 data
    • 读取成功
      • err: null
      • data: 文件内容,若是不设置参数2,则返回二进制数据。可使用 toString() 方法将二进制数据 转为正常字符串
    • 读取失败
      • err: 错误对象
      • data: undefined
const fs = require("fs")
fs.readFile('文件路径',"utf8", (err, data) => {
  if (err) throw err;
  console.log(data);
});
复制代码

同步格式: 与异步格式不一样在于:api

  • api的名字后面有Sync
  • 不是经过回调函数来获取值,而是像一个普通的函数调用同样,直接获取返回值
const fs = require("fs")
    let rs = fs.readFileSync('文件路径',"utf8");
    console.log(rs)

复制代码

文件写入

覆盖写入 writeFile浏览器

功能:向指定文件中写入字符串(覆盖写入), 若是没有该文件则尝试建立该文件。它把把文件中的内容所有删除,再填入新的内容。bash

格式:fs.writeFile(var1, var2, var3, var4);服务器

参数1: 要写入的文件路径 --- 相对路径和绝对路径都可,推荐使用绝对路径app

参数2: 要写入文件的字符串异步

参数3: 配置项,设置写入的字符集,默认utf-8

参数4: 写入完成后触发的回调函数,有一个参数 --- err (错误对象)

const fs = require('fs')
fs.writeFile('./a.txt', 'hello world niahi \n asfsdf', err => {
  if (err) {
    console.info(err)
    throw err
  }
})
复制代码

文件追加 appendFile

功能 :向指定文件中写入字符串(追加写入), 若是没有该文件则尝试建立该文件

格式:fs.appendFile(var1, var2, var3, var4);

参数1: 要写入的文件路径 --- 相对路径和绝对路径都可,推荐使用绝对路径

参数2: 要写入文件的字符串

参数3: 配置项,设置写入的字符集,默认utf-8

参数4: 写入完成后触发的回调函数,有一个参数 --- err (错误对象)

const fs = require('fs')

fs.appendFile('./a.txt', '\n 为天地立命', err => {
  if (err) {
    console.info(err)
    throw err
  }
})
复制代码

路径问题

在读取文件时,写相对路径是容易出问题的。

  • 咱们在fs中读取文件时,使用的是相对路径,而相对路径的参考点是运行这个js文件的小黑窗的路径。而这个路径咱们是能够经过cd命名来调整的。

解决方法,就是在操做文件时,使用绝对路径来定位文件。 __dirname __filename 获取绝对路径

绝对路径: 从磁盘根目录开始到指定文件的路径。

相对路径:是以某个文件的位置为起点,相对于这个位置来找另外一个文件。

nodejs中提供了两个全局变量来获取获取绝对路径:

  • __dirname:获取当前被执行的文件的文件夹所处的绝对路径
  • __filename:获取当前被执行的文件的绝对路径

2.path模块

它是一个核心模块,用来处理路径问题:拼接,分析,取后缀名。

  • path.basename(路径)获取
  • path.join()
  • path.parse(path) 转成一个对象

3.http模块

快速搭建服务器:

// http.js
// 引入核心模块http
const http = require('http');

// 建立服务
const server = http.createServer(function(req, res) {
  console.log(req.connection.remoteAddress);
  res.end('hello world');
});
// 启动服务
server.listen(8081, function() {
  console.log('success');
});

复制代码
  • 在上面的代码中,咱们经过http.createServer方法建立一个http服务。
// 建立服务
const server = http.createServer((req, res) => {
  console.log(req.connection.remoteAddress);
  res.end('hello world');
});

复制代码

其中的参数是一个函数,这个函数是一个匿名函数,这个函数充当回调函数的角色,当有http请求时,它会自动被调用。

这个回调函数有它有两个参数。这两个参数很是重要,也很是复杂.

  • 第一个参数表示来自客户端浏览器的请求,第二个参数用来设置对本次请求的响应。它们的形参名并不重要,可是,通常第一个参数名使用req或者request表示,第二个参数使用res或者resposne表示。
  • 当某个客户端来请求这个服务器时,这个函数会自动调用,同时会自动给这两个参数赋值。第一个参数中包括本次请求的信息。
    • req:请求
      • req.url。本次请求的地址
      • req.method。 获取请求行中的请求方法
      • req.headers。 获取请求头
  • 第二个参数用来设置本服务器对此次请求的处理。
    • 这个参数通常命名是res,它是一个对象,其中有不少方法和属性。
    • res.end()
      • 把把本次的处理结果返回给客户端浏览器
      • 若是不写这一句,则客户端浏览器永远收不到响应。
    • res.setHeader() 设置响应头,好比设置响应体的编码 res.setHeader('content-type', 'text/html;charset=utf-8');
    • res.statusCode 设置状态码

4.url模块

做用:url模块用来对url(例如:itcast.cn:80/schools/stu…

手册地址:nodejs.cn/api/url.htm…

步骤:

  • 引入 const url = require('url');
  • 使用它的方法
    • obj = url.parse(地址栏中输入的url)
let urlobj = url.parse(req.url); // urlobj对象中,就有咱们须要的信息
      urlobj.pathname :获取用户输入的url的路径名 ('/schools/students')
      urlobj.search: '?id=18&name=zs',
        urlobj.query: 获取用户输入的url中的查询字符串( 'id=18&name=zs' )
        urlobj.path: '/schools/students?id=18&name=zs',
        urlobj.href: '/schools/students?id=18&name=zs' 
复制代码

上面urlobj.query只是得到了传递的所有参数,咱们通常还需从地址栏中分析传递的数据。即从 itcast.cn:80/schools/stu…

5.querystring模块

用来对url中的查询字符串这部分进行处理。nodejs中提供了querystring这个核心模块来帮助咱们处理这个需求。

const qs= require('querystring');
let obj = qs.parse('id=18&name=zs');
console.log(obj)
复制代码
相关文章
相关标签/搜索