一、Nodejs 介绍
- Node.js 是一个 Javascript 运行环境(runtime)。它让 JavaScript 可以开发后端程序, 它几乎能实现其他后端语言能实现的所有功能。
- Nodejs 是基于 Google V8 引擎,V8 引擎是 Google 发布的一款开源的 JavaScript 引擎, 原来主要用于 Chrome 浏览器的 JS 解释部分,但是 Ryan Dahl 把 V8 引擎搬到了服务器上,用于做服务器的软件。
二、NodeJs 环境搭建
- 官网:nodejs.org/en/
- 下载地址:nodejs.org/en/download…
- 下载稳定版本、双击下一步下一步安装。
- 安装完成重新打开终端查看版本验证是否成功
三、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' ]