node.js相信你們並不陌生,如今不少公司招前端也是要求前端人員必須會node了 先說一下應用場景,目前公司中用node主要是用node來作中間層,固然是大多數公司,由於通常公司項目都已經成型了,加上node人員很差招,因此真徹底用來作後臺的不多(不過作起來是徹底沒問題的)。javascript
不少人都在說node適合作中間層,那麼中間層是什麼呢? 聽着好聽,用大白話講就是給先後端擦屁股的,最先是java的中間件概念,後來後臺都不肯意作,而後大公司不少很大很老的項目,無法動,以前寫的人也早走了,這時候用中間層接着搞是最方便的了。html
你們獲取聽過node相關的一些框架、express、koa,或者一些企業級應用到egg也好,配合前端服務端渲染的next、nuxt的等等吧,爲啥不直接講koa這種方便的東西呢,由於我一直以爲一件事,工具強了,人就弱了,框架這種東西比狗還多,幾年換一個主流、只有先把基礎學會,框架其實百變不離其宗。前端
nodejs確定是個服務器,那麼你們也都知道,任何瀏覽器和服務器之間的通訊都是用http協議來完成的。那麼理論上來講,寫一個服務器須要對http服務有很是深的瞭解,不過有興趣你們能夠搜一下,看完了頭髮都掉光了。node做者確定也想到了這個事,因此nodejs 系統自帶的包裏也有http相關的模塊來直接用 java
nodejs須要提早安裝,官網上直接下載安裝就能夠,會裝qq 裝node也是徹底沒問題的node
首先我們新建一個項目,裏面建一個server.js, 注意不能有中文,名字是隨便的,而後代碼寫成如今這樣nginx
const http = require('http');
http.createServer(()=>{
console.log('有新連接')
})
複製代碼
而後這個時候咱們在終端裏運行這個文件 node server.js
。 注意,這個時候命令行裏直接執行完了,就結束了。這裏有個概念須要清楚 一臺服務器,是執行一下就完了麼?答案確定是否是,一臺服務器須要永遠在運行,可是我們如今寫的服務器一會兒就結束了,由於我們還有個很是重要的東西沒有作,就是 監聽 web
監聽 —— 通俗點來講就是開一家超市,須要有個售貨員在哪等着,有人來了就結帳,監聽就是這個意思。往專業的角度來講說就更簡單了,一臺服務器可能會跑不少服務器,比方說web相關的,郵件相關的,什麼遊戲相關的,這個時候就須要指定一個端口,至關於你訂外賣得告訴別人門牌號,好的接下來咱們來改一下這個代碼chrome
const http = require('http');
let server = http.createServer(() => {
console.log('有新連接');
});
// 監聽端口
server.listen(5000);
複製代碼
這個端口是隨便給的,不過有一些通用的端口可能會被佔了,好比80-web服務,若是你電腦上裝了這些服務就會報錯、改一下就行了,後面會說到端口怎麼共存,也就是所謂的 端口轉發 數據庫
而後運行我們的文件 node server.js
就會看到什麼都沒有,由於他在一直監聽,這時候打開瀏覽器 輸入網址 http://localhost:5000/ 而後查看終端就會看到console.log了 express
雖然我們如今console出來了,可是你能夠看到瀏覽器了沒有任何東西 一直在轉,很簡單由於我們的服務器什麼都沒返回,至於怎麼返回下文會說
** 首先來介紹一下 createServer, 他這個第一個會調裏會有兩個參數 request 請求 - 輸入-請求的信息 response 相應 - 輸出-服務器的響應
response 裏有兩個 方法,一個是**write **一個是 end , 也就是一個是寫東西,一個是結束,好的我們再來改造一下代碼
const http = require('http');
let server = http.createServer((req, res) => {
res.write("hello");
res.end();
});
// 監聽端口
server.listen(5000);
複製代碼
注意,修改過文件以後須要關閉服務從新啓動 打開終端按 control + c
便可
這時候再來訪問http://localhost:5000/ 就能夠看到內容了
既然能返回數據了,我們再來看看request裏的東西
const http = require('http');
let server = http.createServer((req, res) => {
console.log(req.url);
res.write("hello");
res.end();
});
// 監聽端口
server.listen(5000);
複製代碼
首先我們把請求路徑打出來,而後瀏覽器打開http://localhost:5000/1.jpg 這時候終端裏就會打印出來1.jpg 不過你們可能奇怪爲何會訪問一個/favicon.ico 這個是網站的圖標,這個是chrome自動幫你請求的 若是我們不想看到他能夠直接一個if return掉
這時候咱們再來改造一下代碼
const http = require('http');
let server = http.createServer((req, res) => {
console.log(req.url);
switch (req.url) {
case '/1.html':
res.write('1.html');
break;
case '/2.html':
res.write('2.html');
break;
default:
res.write('404');
break;
}
res.end();
});
// 監聽端口
server.listen(5000);
複製代碼
而後訪問1.html就會出現 是否是很簡單
固然了,我們這只是一個很簡單的例子,至於你們可能聽過或者見過什麼koa-router也好或者等等的router 能夠直接router.get post 也能夠渲染靜態文件,api服務的話能夠走到controller裏等等的功能吧,原理其實都是這,只不過那些東西幫你封裝好了而已,不事後續我們這個系列裏也會提到。
有什麼感興趣的,或者遇到什麼問題能夠直接加我好友,我們一塊兒溝通
看到有小夥伴反應說不夠深刻,這裏說明一下,這個是nodeJS從零到精通系列,若是全放在一篇那就太長了,上文說過的轉發之類的會在以後的nginx篇裏。以後涉及到的東西有不少,包括node進程,日誌處理,數據處理,配合頁面埋點數據寫入,分析, 封裝框架、數據庫等等,有興趣的小夥伴能夠關注下
本篇以後是fs篇,node文件操做是很重要的哦 文章連接—— juejin.cn/post/684490…
搭完簡單的服務器以後kennel你們更好奇的 的是怎麼處理請求,本身提交get、post數據本身處理
Nodejs-基礎-http-處理請求 juejin.cn/post/684490…
關注不迷路哦~~~~~~~
微信:Dyy916829411
qq: 916829411