Nodejs-基礎-http

簡介

node.js相信你們並不陌生,如今不少公司招前端也是要求前端人員必須會node了 先說一下應用場景,目前公司中用node主要是用node來作中間層,固然是大多數公司,由於通常公司項目都已經成型了,加上node人員很差招,因此真徹底用來作後臺的不多(不過作起來是徹底沒問題的)。javascript

中間層

不少人都在說node適合作中間層,那麼中間層是什麼呢? 聽着好聽,用大白話講就是給先後端擦屁股的,最先是java的中間件概念,後來後臺都不肯意作,而後大公司不少很大很老的項目,無法動,以前寫的人也早走了,這時候用中間層接着搞是最方便的了。html

前言

你們獲取聽過node相關的一些框架、express、koa,或者一些企業級應用到egg也好,配合前端服務端渲染的next、nuxt的等等吧,爲啥不直接講koa這種方便的東西呢,由於我一直以爲一件事,工具強了,人就弱了,框架這種東西比狗還多,幾年換一個主流、只有先把基礎學會,框架其實百變不離其宗。前端

簡易服務器

nodejs確定是個服務器,那麼你們也都知道,任何瀏覽器和服務器之間的通訊都是用http協議來完成的。那麼理論上來講,寫一個服務器須要對http服務有很是深的瞭解,不過有興趣你們能夠搜一下,看完了頭髮都掉光了。node做者確定也想到了這個事,因此nodejs 系統自帶的包裏也有http相關的模塊來直接用 image.pngjava

建立文件

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了 image.pngexpress

雖然我們如今console出來了,可是你能夠看到瀏覽器了沒有任何東西 image.png 一直在轉,很簡單由於我們的服務器什麼都沒返回,至於怎麼返回下文會說

http.createServer

** 首先來介紹一下 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/ image.png 就能夠看到內容了

處理請求

既然能返回數據了,我們再來看看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 image.png 不過你們可能奇怪爲何會訪問一個/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就會出現 image.png 是否是很簡單

固然了,我們這只是一個很簡單的例子,至於你們可能聽過或者見過什麼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

相關文章
相關標籤/搜索