前言
Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台 JavaScript 运行环境。Node.js 由Node.js Foundation(已与JS Foundation合并为OpenJS Foundation)持有和维护,亦为 Linux 基金会的项目。Node.js采用Google开发的V8运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。这些技术通常用于资料密集的即时应用程序。(维基百科)
创建服务器
1 2 3 4 5 6 7 8
| let http = require("http");
let server = http.createServer(function(request, response) { response.end("Hello World !"); });
server.listen(80);
|
启动服务器
<name>
:服务器js文件名
访问服务器
设置响应类型
设置响应类型为文字,并设置字符集
1
| response.setHeader("Content-Type", "text/html;charset=utf-8");
|
设置相应类型为图片
1
| response.setHeader("Content-Type", "image/jpg");
|
输出语句
end()
- 不能输出多行
- 只能输出字符串
- 可以输出html标签
write()
- 可以输出多行
- 只能输出字符串
- 可以输出html标签
- 结尾必须有end()
1 2
| response.write(); response.end();
|
控制台输出
异步读取文件
<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);
|
获取地址栏的地址
顶层路由设计
- 物理文件层和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");
let url = request.url; let arr = url.match(/\/(.+)\/(.+)$/); 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);
|
自动渲染所有静态资源
完成
参考文献
哔哩哔哩——Python小清风