亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

零基礎之Node.js搭建API服務器的詳解

2024-05-06 16:48:51
字體:
來源:轉載
供稿:網友

零基礎之Node.js搭建API服務器

這篇文章寫給那些Node.js零基礎,但希望自己動手實現服務器API的前端開發者,嘗試幫大家打開一扇門。

HTTP服務器實現原理

HTTP服務器之所以能提供前端使用的API,其實現原理是服務器保持監聽計算機的某個端口(通常是80),等待客戶端請求,當請求到達并經過一系列處理后,服務器發送響應數據給到前端。

平時大家通過Ajax調用API,即是發起一次請求,經過服務器處理后,得到結果,然后再進行前端處理。如今使用高級編程語言,要實現服務器那部分功能已經變得非常簡單,接下來我們了解一下使用Node.js如何實現。

什么是Node.js?它可以做什么?

Node.js是一個JavaScript的運行時(runtime),它提供了大量用JS與操作系統打交道的API,通過這些API,我們可以調用本地程序、讀寫磁盤、監聽端口、發起網絡請求等,這足以開發出一個功能完善的Server。

前期準備

簡單介紹完Node.js,開始寫代碼之前,我們需要安裝Node.js,安裝詳細過程就不說明了,請大家Google或者百度。不同系統安裝過程不一樣,如果是Linux、Mac,會相對順利且遇到問題的可能性較低。

判斷安裝成功與否,windows下,在cmd中執行node -v,Linux、Mac下,在shell中執行node -v,正常輸出版本號說明安裝成功。

tips:

windows如果提示命令未找到,可能是未配置環境變量

實現簡單的Server

Node.js安裝成功,我們找個地方新建目錄my-server作為我們的存放代碼的地方,接下來所有的代碼都在該目錄下。首先,在my-server的目錄下新建文件index.js,用如下代碼實現一個簡單的Server:

// index.js// 通過require獲取兩個node內置模塊const http = require('http');const nUrl = require('url');// '127.0.0.1'表明只有本機可訪問,'0.0.0.0'表示所有人可訪問const hostname = '127.0.0.1';const port = 3000;// 通過http.createServer獲取一個server實例// 其中(req, res) => {},在服務器每次接收到請求時都會被執行const server = http.createServer((req, res) => {  let method = req.method; // 客戶端請求方法  let url = nUrl.parse(req.url); // 將請求url字符串轉換為node的url對象  // 如果客戶端GET請求'/',會執行這個分支里面的邏輯  if (method === 'GET' && url.pathname === '/') {    res.statusCode = 200;    res.setHeader('Content-Type', 'text/plain');    res.end('Hello World');    return;  }  // 如果客戶端GET請求'/api/user',會執行這個分支里面的邏輯  if (method === 'GET' && url.pathname === '/api/user') {    res.statusCode = 200;    res.setHeader('Content-Type', 'application/json');    res.end(JSON.stringify({      code: 0,      msg: '',      result: {        username: 'shasharoman'      }    }));    return;  }  // 沒有匹配其他分支的話,執行以下邏輯  res.statusCode = 404;  res.setHeader('Content-Type', 'text/plain');  res.end('Not Found');});// server開始監聽,等待請求到來server.listen(port, hostname, () => {  console.log(`Server running at http://${hostname}:${port}/`);});

文件內容編輯保存后,在my-server目錄下通過命令node index.js啟動服務,然后在瀏覽器中訪問http://127.0.0.1:300/、http://127.0.0.1:300/api/user、http://127.0.0.1:300/xxx觀察不同結果。

這是官方Guides經過小小修改得到的代碼,添加部分注釋以及額外邏輯。主要為了更清晰傳達以下幾個知識點:

  • 從req對象上獲取method與url,這個req對象是客戶端請求的“抽象表現”,平時寫Ajax指定的絕大部分內容都可以從該對象上獲取
  • 中間添加的兩個if分支,主要是為了讓大家了解服務器如何區分不同請求,決定做不同事情,即路由概念
  • Content-Type: application/json,通常API會使用的響應格式,表明返回數據是json格式,這是一個HTTP頭部,屬于HTTP協議相關知識
  • statusCode:404,HTTP最常見的錯誤“Not Found”,也屬于HTTP協議相關知識

往前優化一步

通過上面的代碼,實現了一個簡單Server,但真實場景下我們會這樣去實現嗎?答案是肯定不會,所以我們還需要一步步完善,做以下幾個修改:

  • 增加config,在其中配置hostname,port
  • 增加controller,用于分層以及分模塊
  • 增加route,用于定義路由

代碼不多,一共五個文件:

  • config.js,配置文件
  • route.js,路由定義文件
  • controller/account.js,賬號模塊業務實現文件
  • controller/index.js,業務匯總并暴露給外部
  • index.js,項目啟動文件
// config.jsexports = module.exports = {  hostname: '127.0.0.1',  port: '3000'};
// route.jsexports = module.exports = [{  method: 'GET',  path: '/api/user',  impl: 'account.userById'}, {  method: 'POST',  path: '/api/user',  impl: 'account.createUser'}];
// controller/account.jsexports.userById = userById;exports.createUser = createUser;function userById(req, res) {  res.end('waiting for impl.');}function createUser(req, res) {  res.end('waiting for impl.');}
// controller/index.jsexports.account = require('./account');
// index.jsconst http = require('http');const nUrl = require('url');const config = require('./config');const controller = require('./controller');const route = require('./route').map(item => {  console.log(`route ${item.method}:${item.path}`);  let tuple = item.impl.split('.');  item.impl = controller[tuple[0]][tuple[1]];  return item;});const server = http.createServer((req, res) => {  let method = req.method;  let url = nUrl.parse(req.url);  let matchRoute = route.find(item => {    return item.method === method && item.path === url.pathname;  });  if (matchRoute) {    matchRoute.impl(req, res);    return;  }  res.statusCode = 404;  res.setHeader('Content-Type', 'text/plain');  res.end('Not Found');});server.listen(config.port, config.hostname, () => {  console.log(`Server running at http://${config.hostname}:${config.port}/`);});

依舊是用node index.js啟動Server,如果要在現有模式下開發一個API,主要就兩步:

  • 在route.js中定義路由
  • 在controller/中實現

做這個程度的優化,只是為了向大家傳達一些比較寬泛的概念,還不是真正用來寫API服務,只是為了大伙練練手。

這個程度還達不到真實場景需求,還需要經過幾輪改造,包括模塊、層、common、lib、query解析,body解析、更靈活的route等一系列事情,限于篇幅,有機會在一一講述。

經過我的描述以及代碼示例,如果大家有興趣學習Node.js,建議多搜搜相關知識,保持關注,然后在逐步去熟悉Node.js流行的Web框架如:Express、Koa等,不過框架只是更高層面的封裝,基礎的概念以及知識還是需要花時間才能掌握。

如果前端想嘗試后端編程,請一定先學習HTTP協議,推薦《HTTP權威指南》從頭到尾認真看一遍。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合视频一区中文字幕| 国产精品免费观看在线| 大胆欧美人体视频| 日韩高清电影免费观看完整| 日韩免费精品视频| 粉嫩av一区二区三区免费野| 精品日韩美女的视频高清| 在线观看91久久久久久| 日韩精品视频在线免费观看| 欧美—级a级欧美特级ar全黄| 久热99视频在线观看| 欧美性受xxx| 亚洲免费电影在线观看| 久久久之久亚州精品露出| 日韩在线观看免费av| 97在线精品视频| 久久人人爽亚洲精品天堂| 中文字幕日韩欧美| 国产成人福利夜色影视| 91亚洲国产成人久久精品网站| 国产精品免费一区豆花| 92裸体在线视频网站| 国产精品视频26uuu| 日韩精品高清在线观看| 日韩免费在线视频| 欧美激情免费观看| 国产精品亚洲激情| 亚洲女同性videos| 成人国产精品一区二区| 欧美有码在线视频| 中文字幕在线日韩| 一区二区三区精品99久久| 日韩中文字幕在线免费观看| 91国产精品91| 神马久久久久久| 色综久久综合桃花网| 日韩黄色高清视频| 国产成人久久精品| 国产成人激情小视频| 欧美做受高潮电影o| 亚洲国产精久久久久久| 在线观看中文字幕亚洲| 亚洲欧洲黄色网| 久久久人成影片一区二区三区观看| 久久久电影免费观看完整版| 91成品人片a无限观看| 国产精品一区二区三区在线播放| 一区二区亚洲欧洲国产日韩| 性欧美xxxx| 性色av一区二区三区免费| 国产精品丝袜高跟| 国产精品一区二区久久精品| 久久精品成人欧美大片| 97精品在线观看| 日韩国产欧美区| 久久免费视频观看| 国产成人免费91av在线| 日韩经典中文字幕| 中文字幕久久久av一区| 精品国产一区二区三区四区在线观看| 久久视频在线播放| 亚洲激情中文字幕| 欧美色欧美亚洲高清在线视频| 亚洲欧美激情另类校园| 成人黄色影片在线| 欧美一级免费看| 精品国产精品三级精品av网址| 91免费人成网站在线观看18| 97香蕉超级碰碰久久免费的优势| 国产精品美女久久| 日韩欧美国产中文字幕| 日韩精品免费在线视频| 日韩av网站在线| 日本高清视频精品| 久久精品国产69国产精品亚洲| 国产www精品| 国产在线不卡精品| 成人福利在线观看| 久久99亚洲精品| 久久精品91久久久久久再现| 亚洲韩国欧洲国产日产av| 国产一区私人高清影院| 97免费视频在线播放| 亚洲欧洲在线看| 91在线中文字幕| 亚洲性生活视频| 麻豆国产va免费精品高清在线| 精品日本美女福利在线观看| 永久免费看mv网站入口亚洲| 欧美专区日韩视频| 91香蕉嫩草神马影院在线观看| 欧美精品久久久久| 国产一区二区三区在线免费观看| 国产人妖伪娘一区91| 亚洲人成在线观看| 国产一区玩具在线观看| 亚洲aⅴ男人的天堂在线观看| 综合网日日天干夜夜久久| 久久精品国产一区二区电影| 色中色综合影院手机版在线观看| 国产日产久久高清欧美一区| 亚洲精品久久久久| 九色精品免费永久在线| 久久久久国产一区二区三区| 亚洲国产97在线精品一区| 欧美日韩成人免费| 国产精品久久久久秋霞鲁丝| 久久久久久久激情视频| 国产福利精品在线| 欧美日韩国产专区| 日韩视频在线一区| 国内外成人免费激情在线视频网站| 国产精品视频色| 日韩av网站大全| 久久久精品免费| 九九精品在线播放| 超碰精品一区二区三区乱码| 亚洲精品一区二区在线| 国产成人精品免高潮在线观看| 国产区精品视频| 91av中文字幕| 奇米4444一区二区三区| 国产91久久婷婷一区二区| 91亚洲精品在线观看| 日韩免费av一区二区| 美女撒尿一区二区三区| 国产精品欧美亚洲777777| 日韩亚洲精品电影| 久久不射热爱视频精品| 91av在线免费观看| 成人免费视频网址| 亚洲小视频在线观看| 色综合久久久久久中文网| 成人欧美在线观看| 亚洲aⅴ日韩av电影在线观看| 欧美最近摘花xxxx摘花| 欧美一二三视频| 亚洲专区中文字幕| 日韩av在线精品| 亚洲一区二区三区成人在线视频精品| 日韩av在线免费观看| 91成人在线播放| 亚洲精品视频中文字幕| 日韩中文字幕在线播放| 美日韩精品免费视频| 国产精品网红直播| 久热精品视频在线观看一区| 欧美洲成人男女午夜视频| 久99久在线视频| 91精品久久久久久久久久久| 最近中文字幕mv在线一区二区三区四区| 中文字幕免费国产精品| 久久精品视频导航| 91av网站在线播放| 国产在线999| 国产欧美日韩中文字幕| 欧美成aaa人片在线观看蜜臀| 一个人www欧美| 日韩在线小视频| 久久久久久国产精品美女| 97久久精品人搡人人玩| 亚洲国产成人久久综合| 欧美中文字幕视频在线观看| 日韩av电影中文字幕|