今天的目标是:用NodeJS练习写一个简单的Web Server,所以会先介绍一下NodeJS中的http模组,然後再来看看要如何让网页在客户端与服务器端传递。
NodeJS的http模组的来源是名为http_parser的C语言函式库,用於执行HTTP应用程序、处理请求(request)与回应(response),其中的createServer()
方法用来建立Server,藉由回呼函式提供监听事件,在收到请求时处理请求内容及送出回应,而NodeJS中开发的程序码透过http模组,不仅可以回应HTTP请求,也可以用在提出HTTP请求。
Web Server意为网页系统的服务器,透过HTTP接收、处理及传送网页或其他档案至客户端(通常为浏览器),这边会以NodeJS实作简易的Web Server。
写一个Server
createServer()
建立一个新的Server,createServer()
参数为包含有请求req
及回应res
两个参数的回呼函式,在建立Server时要加上listen()
以监听指定IP位址及埠,范例中IP位址127.0.0.1为本机localhost的IP,而埠可自行指定。let http = require("http");
http.createServer(function(req, res){
}).listen(1324, "127.0.0.1");
writeHead()
定义回应的Status和Headers,再以sendData()
或end()
传送内容,若以end()
回传内容则表示传送完之後便结束这个工作程序。http.createServer(function(req, res){
res.writeHead(200, {"Content-Type": "text/plain"}); //回应状态OK,资料类型MIME为纯文字
res.end("Hello~\n");
}).listen(1324, "127.0.0.1");
输出html
这部份提到的html输出包含静态的html页面及以placeholder保留变数在後续更新内容的html样板~
html
index.html
的html档案。<html>
<head></head>
<body>
<h1>Hello To ITs</h1>
<p>This is just an example</p>
</body>
</html>
http
模组处理请求与回应,并引入fs
模组以读取档案。let http = require("http");
let fs = require("fs");
fs
模组的功能读取为Buffer,再作为传送的回应内容,在Header的部份要将contentType
设定为text/html
以让执行引擎确认资料类型并转换,若设定为text/plain
会直接以纯文字将html档案内容传送至浏览器。http.createServer(function(req,res){
let html = fs.readFileSync(`${__dirname}/index.html`);
res.writeHead(200, {"contentType":"text/html"});
res.end(html);
}).listen(1324,"127.0.0.1");
html样板
{DateMsg}
参数作为placeholder。<html>
<head></head>
<body>
<h1>Hello To ITs</h1>
<p>This is just an example</p>
<p>{DateMsg}</p> <!--加入placeholder-->
</body>
</html>
readFileSync()
方法加入编码参数,把html档案改以串流的方式读取,以便修改内容。http.createServer(function(req,res){
let html = fs.readFileSync(`${__dirname}/index.html`, "utf8"); //加入编码参数,html为Stream
res.writeHead(200, {"contentType":"text/html"});
res.end(html);
}).listen(1324,"127.0.0.1");
{DateMsg}
的变数,更新html
。http.createServer(function(req,res){
let html = fs.readFileSync(`${__dirname}/index.html`, "utf8"); //加入编码参数,html为Stream
let date = new Date();
html = html.replace("{DateMsg}", date);
res.writeHead(200, {"contentType":"text/html"});
res.end(html);
}).listen(1324,"127.0.0.1");
过去在以C#为後端程序语言进行开发时,几乎不需要了解服务器执行的内容,因为微软的IIS实在太方便囧 虽然NodeJS创建Server的功能看似很容易也很有趣,但已经可以想像如果系统复杂度比较高的情况下,可能需要更多的时间去规划和维护,除了这些基础以後还是要再多尝试、探究。
https://github.com/nodejs/http-parser
https://zh.wikipedia.org/wiki/网页服务器
https://nodejs.org/dist/latest-v16.x/docs/api/http.html
https://github.com/nodejs/http-parser
Learn and Understand NodeJS [课程]
>>: Day 12: Structural patterns - Bridge
前言 今天要继续昨天做过的部分,因此一开始需要昨天的程序码 import pandas as pd ...
写这篇主要是提供那些动不动会改错料号 需要回复前一版料号,首先要知道如果关联是用float时 子阶料...
自定义了一个数字键盘: 自己电脑跑起来是正常的,但是切换到一个分辨率不一样的电脑时就跑掉了,不整齐;...
本节是以 Golang 上游 7ee4c1665477c6cf574cb9128deaf9d009...
第二天,我们在讲解基本语法之前,先讲一下我们变数在命名的时候会遇到的"驼峰式命名法&quo...