Node.js

462 阅读4分钟

一、Nodejs 介绍

  1. Node.js 是一个 Javascript 运行环境(runtime)。它让 JavaScript 可以开发后端程序, 它几乎能实现其他后端语言能实现的所有功能。
  2. Nodejs 是基于 Google V8 引擎,V8 引擎是 Google 发布的一款开源的 JavaScript 引擎, 原来主要用于 Chrome 浏览器的 JS 解释部分,但是 Ryan Dahl 把 V8 引擎搬到了服务器上,用于做服务器的软件。

二、NodeJs 环境搭建

  1. 官网:nodejs.org/en/
  2. 下载地址:nodejs.org/en/download…
  3. 下载稳定版本、双击下一步下一步安装。
  4. 安装完成重新打开终端查看版本验证是否成功

三、Node.js 创建第一个应用

如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器, 来处理客户端的请求相应。不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时, 我们不仅仅在实现一个应用,同时还实现了整个 HTTP 服务器。

1、引入 http 模块

var http = require("http");

2、创建服务器

接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8081 端口。 函数通过 request, response 参数来接收和响应数据。

// 引入HTTP模块
const http = require('http');
/*
创建服务
request 获取url传过来的信息
response 给浏览器响应信息
*/
http.createServer(function (request, response) {
    //获取请求路径
    console.log('request.url',request.url);
    // 设置响应头 状态码200,文件类型 html 字符集UTF-8
    response.writeHead(200, {
        "Content-type": "text/html; charset=UTF-8"
    });
    // 页面编码要和响应头编码一致,否则可能乱码
    response.write('<head><meta charset="UTF-8"></head>');
    response.write('你好 Hello World1111');
    //   给页面上输出一句话并且结束响应
    response.end('Hello World');
}).listen(8081); //端口

console.log('Server running at http://127.0.0.1:8081/');

你会发现,我们本地写一个 js,打死都不能直接拖入浏览器运行,但是有了 node,我 们任何一个 js 文件,都可以通过 node 来运行。也就是说,node 就是一个 js 的执行环境。

四、Nodejs 自启动工具 supervisor

每次修改文件都需要从新运行较为繁琐。supervisor 会不停的 watch 你应用下面的所有文件,发现有文件被修改,就重新载入程序文件这样就实现了部署,修改了程序文件后马上就能看到变更后的结果。

1、首先安装 supervisor

npm install -g supervisor

2、使用 supervisor 代替 node 命令启动应用

五、HTTP 模块、URL 模块

Node.js 中,将很多的功能,划分为了一个个 module(模块)。 Node.js 中的很多功能都 是通过模块实现。

1、HTTP 模块

// 引入HTTP模块
const http = require('http');
/*
创建服务
request 获取url传过来的信息
response 给浏览器响应信息
*/
http.createServer(function (req, res) {
    //获取请求路径
    console.log('request.url',request.url);
    // 设置响应头 状态码200,文件类型 html 字符集UTF-8
    response.writeHead(200, {
        "Content-type": "text/html; charset=UTF-8"
    });
    // 页面编码要和响应头编码一致,否则可能乱码
    response.write('<head><meta charset="UTF-8"></head>');
    response.write('你好 Hello World1111');
    //   给页面上输出一句话并且结束响应
    response.end('Hello World');
}).listen(8081); //端口

console.log('Server running at http://127.0.0.1:8081/');

我们现在来看一下 req 里面能够使用的东西。 最关键的就是 req.url 属性,表示用户的请求 URL 地址。所有的路由设计,都是通过 req.url 来实现的。 我们比较关心的不是拿到 URL,而是识别这个 URL。 识别 URL,用到了下面的 url 模块

2、URL 模块

url.parse() 解析 URL 
url.format(urlObject) //是上面 url.parse() 操作的逆向操作 
url.resolve(from, to) 添加或者替换地址

六、Nodejs 中的 fs 模块的使用

1. fs.stat 检测是文件还是目录

const fs = require('fs') 
fs.stat('app.js', (error, stats) => {
    if (error) {
        console.log(error)
    } else {
        console.log(stats) 
        console.log(`文件:${stats.isFile()}`) 
        console.log(`目录:${stats.isDirectory()}`)
    }
})
//输出
Stats {
  dev: 16777220,
  mode: 33204,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 9708333,
  size: 5008,
  blocks: 16,
  atimeMs: 1602052594380.3125,
  mtimeMs: 1578113486000,
  ctimeMs: 1602052586046.2324,
  birthtimeMs: 1578113486000,
  atime: 2020-10-07T06:36:34.380Z,
  mtime: 2020-01-04T04:51:26.000Z,
  ctime: 2020-10-07T06:36:26.046Z,
  birthtime: 2020-01-04T04:51:26.000Z
}
文件:true
目录:false

2. fs.mkdir 创建目录

const fs = require('fs')
 fs.mkdir('logs', (error) => {
    if (error) {
        console.log(error)
    } else {
        console.log('成功创建目录:logs')
    }
})

3. fs.writeFile 创建写入文件

重复执行会覆盖

const fs = require('fs')
fs.writeFile('logs/hello.log', '您好 ~ \n', (error) => {
    if (error) {
        console.log(error)
    } else {
        console.log('成功写入文件')
    }
})

4. fs.appendFile 追加文件

追加文件内容,追加的文件不存在会先创建

const fs = require('fs')
fs.appendFile('logs/hello.log', '123 ~ \n', (error) => {
    if (error) {
        console.log(error)
    } else {
        console.log('成功写入文件')
    }
})

5. fs.readFile 读取文件

const fs = require('fs')
fs.readFile('logs/hello.log', 'utf8', (error, data) => {
    if (error) {
        console.log(error)
    } else {
        console.log(data)
    }
})

6. fs.readdir 读取目录

const fs = require('fs') 
fs.readdir('logs', (error, files) => {
    if (error) {
        console.log(error)
    } else {
        console.log(files)
    }
})
// 返回数组-> [ 'hello.log' ]