Day13: HTTP服务器

哈罗~~大家好!!星期五好愉快~~马上进入主题吧!!
今天要介绍的是使用NodeJs建立後端的服务器。

首先NodeJS的後端服务器会依照前端所发送的请求而返回特定的数据
像是最常见的例子,我们在前端输入帐号密码,而传送到NodeJS服务器验证输入的帐号密码是否正确,确认是正确的後,就会传回登入成功的讯息。
而HTTP模块主要是Node的核心模块,HTTP提供了requestresponse对象。
例子:

//HTTP服务器
var http=require("http");
var sever=http.createServer((req,res)=>
{
  res.end("Hello My name is Nicole !");
});
sever.listen(3000);

使用creatSever()去创建HTTP服务器,
范例中的req就是 request的缩写,它是请求目标,可以得知所有HTTP中要请求的讯息;
而res就是response的缩写,它是响应目标,可以把HTTP要响应或反馈讯息传给浏览器,而它们就是请求监听器
使用res.end()後端发送讯息内容给前端
sever.listen()使服务器运行并监听前端的请求,
至於里面的端口号只要不使用0~1023(因为是保留端口)都可以随意设定,而这里我设置了3000。
执行结果:
https://ithelp.ithome.com.tw/upload/images/20210924/201402448T7SsLe6l1.jpg

接下来打开浏览器,输入127.0.0.1:3000
输入127.0.0.1是因为执行在於本机(就是自己本身的电脑IP),亦或是可以输入localhost,而冒号後输入端口号。
可以参考资料: localhost - 维基百科,自由的百科全书 (wikipedia.org)
https://ithelp.ithome.com.tw/upload/images/20210924/20140244c1mo9ykda0.png

结果显示出从後端送出的字串。
这样一个HTTP服务器就创建好了!

当HTTP的请求会触发connection和request这两个事件。
例子:

//监听来自客户端事件
var http=require("http");
var server=http.createServer((req,res)=>
{
    res.writeHead(200,{'Content-Type':'text/plain'});
    res.end("Hello my name is Nicole!!");
});
server.on("connection",(req,res)=>
{
    console.log("connection is ready!!");   
});

server.on("request",(req,res)=>
{
    if(req.url!=="/favicon.ico")//取消/favicon.ico 
    {
    console.log("request");
  // console.log(req.url);
    res.end();
  }
});
server.listen(1600);

执行结果:
https://ithelp.ithome.com.tw/upload/images/20210924/20140244bSR8U8dx73.png

这边还是有点不懂的地方是为何connection会执行了两次?
有神人可以请教嘛!会非常感谢您的!

至於request也会被执行两次,其中有一次是/favicon.ico的请求,
但是我取消了/favicon.ico的请求,所以执行结果才只出现一次request!
更多favicon的参考资料:Favicon - 维基百科,自由的百科全书 (wikipedia.org)

另外,当要停止服务器时,在终端机按下[ctrl]+C即可停止。

需要注意的是:

每当有修改过程序码後,不能和在JavaScript一样按下重新整理就可以更新,
在Node必须要整个浏览器重启才行!!不然怎麽按重新整理都还是停留在一开始的状态哦!


<<:  Day 13 知己知彼

>>:  【从零开始的Swift开发心路历程-Day13】打造自己的私房美食名单Part2

Day-17 你在专案中负责什麽项目?遇到什麽困难?怎麽解决?

如果你有专案,有作品,通常一定会问你这类题目,而且你的回答很重要,千万要小心作答! 以我自身的例子...

Alpine Linux Porting (1.11?)

进场大修的一天,拿了包高血压药。在候诊间持续debug人生XD 依旧先上个进度图: + mkdir ...

吾即是汝,汝即是吾,Ruby 30 天刷题修行篇第二话

大家好,这里是 A Fei,今天是铁人赛开赛第二天,也是连假开始前的小周末,在这先祝各位读者中秋佳节...

机器学习:资料流图(Data Flow Graphs)模型训练架构

资料流模型将运算任务描述成一个"有向无环图",节点表示资料运算和储存,节点之间的...

[第二十二天]从0开始的UnityAR手机游戏开发-APP内撷取画面

在玩AR APP时都有一个拍照功能,本次章节会介绍如何撰写Unity的截图功能 先在Project新...