前言
Node.js代码实例:简单Web服务端。
代码仓库
为什么要写一份Node.js简单Web服务端的代码实例?
- 想多了解一些技术知识,所以简单学习了Node.js
- 写过C和C++的环境和网络编程,它们的处理很复杂。了解到Node.js底层使用Libuv网络异步I/O库,以事件驱动+异步I/O方式运行,适合处理网络I/O高并发的场景,和Go语言相似,具有互相比对的学习价值
- 写过而且写的很多代码都是客户端/服务端(C/S)模型的网络传输,写一份关于Web服务端的传输,能够深入了解Web服务和HTTP原理
内容
- 详细解析创建http服务端的流程、URL的组成、请求消息的结构和响应消息的结构
- 通过网络传输,浏览器客户端向该Web服务端发送“GET”请求,服务端依据URL响应本地相应的HTML、CSS和JavaScript文件,并在客户端渲染显示页面
目录结构
simple_Web_server目录:
www目录:
- index.html
- index.css
- index.js
- value.html
代码
server.js
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| const http_module = require('http') const path_module = require('path') const fs_module = require('fs')
const server = http_module.createServer()
const host = '127.0.0.1' const port = 8000 const request_query_stringing_key = 'key' const site_root_directory = 'www'
server.on('request', (request, response) => { const request_url = request.url
const absolute_url = 'http://' + host + ':' + port + request_url const request_path_query_string = new URL(absolute_url) const request_path = request_path_query_string.pathname const request_query_string = request_path_query_string.searchParams const request_query_string_value = request_query_string.get(request_query_stringing_key)
let fs_path = "" if (request_path === '/') { fs_path = path_module.join(__dirname, site_root_directory, "index.html") } else if (request_path === '/index.html' && request_query_string_value === 'value') { fs_path = path_module.join(__dirname, site_root_directory, "value.html") } else { fs_path = path_module.join(__dirname, site_root_directory, request_path) }
const fs_path_ext_name = path_module.extname(fs_path) const fs_path_mime_type = fs_path_ext_name.slice(1) response.setHeader('content-type', `text/${fs_path_mime_type};charset=utf-8`)
fs_module.readFile(fs_path, 'utf8', (error, data) => { if (error) { response.statusCode = 404 response.write('<h1>404 未找到</h1>') response.end() } else { response.statusCode = 200 response.write(data) response.end() } }) })
server.listen(port, host, () => { console.log(`Wen服务端运行在: http://${host}:${port}`) })
|
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="./index.css"> </head> <body> <h1>这是index.html</h1>
<script src="./index.js"></script> </body> </html>
|
index.css
index.js
value.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head>
<body> <h1>这是value.html</h1> </body>
</html>
|
结果
运行Web服务端:
1 2 3
| PS C:\Users\DSHH\Desktop\simple_Web_server> node server.js Wen服务端运行在: http://127.0.0.1:8000
|
浏览器访问: http://127.0.0.1:8000/ 或 http://127.0.0.1:8000/index.html
浏览器访问: http://127.0.0.1:8000/index.html?key=value
浏览器访问: http://127.0.0.1:8000/other.html
总结
Node.js代码实例:简单Web服务端。
参考资料
作者的话
- 感谢参考资料的作者/博主
- 作者:夜悊
- 版权所有,转载请注明出处,谢谢~
- 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
- 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
- 文章在认识上有错误的地方, 敬请批评指正
- 望读者们都能有所收获