【笔记】Nodejs创建服务器

前言

Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台 JavaScript 运行环境。Node.js 由Node.js Foundation(已与JS Foundation合并为OpenJS Foundation)持有和维护,亦为 Linux 基金会的项目。Node.js采用Google开发的V8运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。这些技术通常用于资料密集的即时应用程序。(维基百科

创建服务器

  • 创建一个js文件
1
2
3
4
5
6
7
8
// 引入Nodejs的内置http模块
let http = require("http");
// 创建服务器
let server = http.createServer(function(request, response) {
response.end("Hello World !");
});
// 设置监听端口,默认为80端口
server.listen(80);

启动服务器

<name>:服务器js文件名

1
node <name>.js

访问服务器

  • 浏览器访问当前地址的监听端口

设置响应类型

设置响应类型为文字,并设置字符集

1
response.setHeader("Content-Type", "text/html;charset=utf-8");

设置相应类型为图片

1
response.setHeader("Content-Type", "image/jpg");

输出语句

end()

  • 不能输出多行
  • 只能输出字符串
  • 可以输出html标签
1
response.end();

write()

  • 可以输出多行
  • 只能输出字符串
  • 可以输出html标签
  • 结尾必须有end()
1
2
response.write();
response.end();

控制台输出

1
console.log();

异步读取文件

<file>:文件路径

1
2
3
4
5
6
7
8
9
let http = require("http");
let fs = require("fs");
let server = http.createServer(function(request, response) {
fs.readFile("<file>", function(error, data) {
// 将文件数据返回
response.end(data);
});
});
server.listen(80);

获取地址栏的地址

1
request.url

顶层路由设计

  • 物理文件层和URL是没有任何关系的
  • 一个页面的URL是可以自定义的
  • 用户输入的URL是可以映射任何html页面的

<url>:地址栏的地址字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
let http = require("http");
let fs = require("fs");
let server = http.createServer(function(request, response) {
response.setHeader("Content-Type", "text/html;charset=utf-8");
if (request.url === "/<url>") {
fs.readFile("<file>", function(error, data) {
response.end(data);
});
} else {
response.end("页面不存在");
}
});
server.listen(80);

模拟知乎路由设计(案例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
let http = require("http");
let server = http.createServer(function(request, response) {
response.setHeader("Content-Type", "text/html;charset-utf-8");
/*
* 获取地址
* 地址举例:127.0.0.1:80/user/plate
*/
let url = request.url;
// 用正则表达式获取信息
let arr = url.match(/\/(.+)\/(.+)$/);
// console.log(arr);

if (!arr) {
console.log("访问出错");
return;
} else {
// 正则获取的第一项参数
let user = arr[1];
// 正则获取的第二项参数
let plate = arr[2];

// 模拟数据
let userList = {
user01: "用户01",
user02: "用户02"
};

let plateList = {
plate01: "版块01",
plate02: "版块02"
};

console.log(`用户-${userList[user]},板块-${plateList[plate]}`);
}
});
server.listen(80)
  • 通过使用Nodejs的路由,可以配合fs实现跳转指定网页

渲染图片

  • 由于顶层路由设计,图片不能根据地址读取,所以需要通过node读取图片文件

<img>:图片位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let http = require("http");
let fs = require("fs");
let server = http.createServer(function(request, response) {
if (request.url === "/hello") {
response.setHeader("Content-Type", "text/html;charset=utf-8");
fs.readFile("./hello.html", function(error, data) {
response.end(data);
});
} else if(request.url === "/img/WallPaper01.jpg") {
// 指定相应类型为图片
response.setHeader("Content-Type", "image/jpg");
fs.readFile("<img>", function(error, data) {
response.end(data);
});
} else {
response.setHeader("Content-Type", "text/html;charset=utf-8");
response.end("页面不存在");
}
});
server.listen(80);

自动渲染所有静态资源

  • 使用express的中间件来静态化一个目录

完成

参考文献

哔哩哔哩——Python小清风