鍍金池/ 問(wèn)答/HTML/ 使用nodejs制作網(wǎng)站

使用nodejs制作網(wǎng)站

我的理解是:

  1. 前端頁(yè)面(比如一個(gè)index.html)
  2. web服務(wù)器(比如apache)
  3. 后端程序(比如用java或php寫(xiě)一個(gè))

在我的概念里,這三者是分離的,但是在nodejs中,2和3似乎是在一起的,查詢nodejs的相關(guān)信息時(shí)也總是找不到對(duì)這方面的介紹。
希望得到nodejs中web服務(wù)器后端程序這兩者的一些解釋
(比如如何做web服務(wù)器的使用和后端程序的開(kāi)發(fā),找到的相關(guān)信息總是十分混亂)
補(bǔ)充:具體地,假設(shè)我需要實(shí)現(xiàn)

  1. 使用ip訪問(wèn)我的index.html
  2. 后端程序響應(yīng)index.html中的一個(gè)post請(qǐng)求,應(yīng)該如何使用nodejs

(不需要具體代碼實(shí)現(xiàn),僅僅想知道如何實(shí)現(xiàn))

回答
編輯回答
司令

分層這個(gè)事吧,其實(shí)各家都有不同的分法,主要看你用什么樣的架構(gòu)。比如:

企業(yè)應(yīng)用架構(gòu)模式

這里就有5種分法,分別對(duì)應(yīng)不同的架構(gòu)模式。
回到題目里,其實(shí)分成“表現(xiàn)層”、“控制層”和“應(yīng)用層”我覺(jué)得是合理的(所以建議你可以去看看有關(guān)于MVC的東西),之所以沒(méi)有一個(gè)“網(wǎng)站服務(wù)器”,是因?yàn)橐淳W(wǎng)站架構(gòu)。如果同時(shí)有前后端的內(nèi)容呢,就可以用Web服務(wù)器把請(qǐng)求分開(kāi),前端的返回靜態(tài)資源,涉及到后端的就轉(zhuǎn)發(fā)給后端的應(yīng)用服務(wù)去處理(但后端應(yīng)用服務(wù)一樣可以自己處理,只是用Web服務(wù)器可能更輕量和靈活一些);但是如果是純后端項(xiàng)目呢,那就不需要Web服務(wù)器轉(zhuǎn)發(fā)了,直接用后端的應(yīng)用服務(wù)監(jiān)控請(qǐng)求就行了,也就沒(méi)有“網(wǎng)站服務(wù)器”一說(shuō)了。

2018年7月7日 04:50
編輯回答
不將就

樓上大佬講了不少理論,我來(lái)補(bǔ)充一下直接針對(duì)性的回答吧。

  • 一個(gè)典型的nodejs服務(wù)器確實(shí)就是2和3一起處理的。如果你是科班出身,網(wǎng)絡(luò)課會(huì)有用C/++寫(xiě)服務(wù)器的作業(yè),也是2和3一起處理的。從這個(gè)角度上來(lái)講,nodejs實(shí)際上有點(diǎn)返璞歸真的感覺(jué)。
  • 但是nodejs也可以不處理2,只處理3,典型的場(chǎng)景是nginx+nodejs做負(fù)載均衡。但是這個(gè)時(shí)候nodejs在邏輯上仍然是獨(dú)立的,它跟nginx之間是通過(guò)標(biāo)準(zhǔn)HTTP協(xié)議通信,而不是cgi。
  • 傳統(tǒng)網(wǎng)站會(huì)這么分,是因?yàn)閯偘l(fā)明HTTP的時(shí)候大部分內(nèi)容都是靜態(tài)的,很多網(wǎng)站就一個(gè)apache,3根本沒(méi)有。用nodejs的網(wǎng)站則大部分都是動(dòng)態(tài)的,把路由和邏輯拆開(kāi)沒(méi)啥意義,還把配置文件分散了。

回答題主的補(bǔ)充問(wèn)題:

如果做過(guò)C/++服務(wù)器的作業(yè)肯定會(huì)理解得非常透徹
  1. 與客戶端完成TCP握手
  2. 客戶端發(fā)送報(bào)文
  3. nodejs收到報(bào)文
  4. nodejs反序列化請(qǐng)求行,拿到請(qǐng)求行中的post
  5. nodejs把報(bào)文主體交給對(duì)應(yīng)的回調(diào)函數(shù)
2018年6月26日 22:06