node.js express框架簡(jiǎn)介與實(shí)現(xiàn)
前言
之前學(xué)習(xí)過(guò)node.js接觸過(guò)express框架,最近為了編寫(xiě)一個(gè)mock server正好用到了express。下面正好就跟大家介紹一下關(guān)于express。
今天的內(nèi)容主要圍繞這么幾個(gè)方面?
- express框架初步介紹
- express框架中的app.use和app.get/app.post
- mock server 介紹
- mock server的實(shí)現(xiàn)思路
一、express框架初步介紹
關(guān)于express框架的介紹,這里我引用菜鳥(niǎo)教程的簡(jiǎn)介:
Express是一個(gè)簡(jiǎn)潔而靈活的node.js web框架,提供了一系列強(qiáng)大特性幫助你創(chuàng)建各種web應(yīng)用,和豐富的HTTP工具。使用Express可以快速地搭建一個(gè)完整功能的網(wǎng)站。
1.express框架的特性
- (1)可以設(shè)置中間件來(lái)響應(yīng)HTTP請(qǐng)求;
- (2)定義了路由表用于執(zhí)行不同大的HTTP請(qǐng)求動(dòng)作;
- (3)可以通過(guò)向模板傳遞參數(shù)來(lái)動(dòng)態(tài)渲染HTML頁(yè)面;
2.安裝express
npm install express --save或cnpm install express --save
以下幾個(gè)重要需要與express框架一起安裝:
- body-parser -node.js中間件,用于處理JSON,Raw,Text和URL編碼的數(shù)據(jù);
- cookie-parser -這就是一個(gè)解析Cookie的工具。通過(guò)req.cookies可以取到傳過(guò)來(lái)的cookie,并將它們轉(zhuǎn)為對(duì)象;
- multer - node.js中間件,用于處理enctype=“multipart/form-data”(設(shè)置表單mime編碼)的表單數(shù)據(jù);
安裝命令如下所示:
npm install body-parser --save npm install cookie-parser --save npm install multer --save
3.express的入門(mén)程序
node_learning.js代碼如下:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World');
})
var server = app.listen(2019, function () {
var host = server.address().address
var port = server.address().port
console.log("應(yīng)用實(shí)例,訪問(wèn)地址為 http://127.0.0.1:2019", host, port)
})
二、express框架中的app.use和app.get/app.post
app.use和app.get/app.post其實(shí)區(qū)別如(引用一位朋友說(shuō)的):
感興趣的可以參考這個(gè)鏈接:作者做了試驗(yàn)測(cè)試過(guò)的
(1)app.use(path,callback)中的callback既可以是router對(duì)象又可以是函數(shù)
(2)app.get(path,callback)中的callback只能是函數(shù)
app.use和app.get/app.post實(shí)現(xiàn)幾乎大同小異,代碼示例如下:
var express = require('express');
var app = express();
function testUser(req, res, next){
// req 參數(shù)可以接受一些請(qǐng)求的參數(shù)(req.query/req.body) 和 請(qǐng)求頭信息
// res 用于響應(yīng)信息
// 調(diào)用next()方法則進(jìn)入下一個(gè)中間件
res.send("測(cè)試用戶(hù)");
}
function testLogin(req,res,next){
res.send("測(cè)試登錄");
}
var server = app.listen(2019, function () {
var host = server.address().address
var port = server.address().port
console.log("應(yīng)用實(shí)例,訪問(wèn)地址為 http://127.0.0.1:2019")
})
//路徑匹配
app.use('/user',testUser);
app.get('/login',testLogin);
關(guān)于node.js的express框架就介紹這么多,最近本人因?qū)崿F(xiàn)某個(gè)插件的功能而需要用到的,這與下面說(shuō)的mock server有比較大的關(guān)系。
三、mock server 介紹
mock server 翻譯過(guò)來(lái)的意思是模擬服務(wù)。
說(shuō)到這我相信大家就很容易理解了。至于為什么要模擬服務(wù)?
比方說(shuō)現(xiàn)今的業(yè)務(wù)系統(tǒng)很少有孤立存在的,它們或多或少使用其他公司提供的服務(wù),這給我們聯(lián)調(diào)和測(cè)試造成了比較大的麻煩,對(duì)于這種情況,常見(jiàn)的解決方案就是搭建一個(gè)mock server,模擬那些服務(wù)器,提供數(shù)據(jù)進(jìn)行聯(lián)調(diào)和測(cè)試

四、mock server的實(shí)現(xiàn)思路
現(xiàn)在google或者being搜索mock server 實(shí)現(xiàn)思路肯定有很多,這里我就不再贅述。
這里我以我自己最近的vscode插件開(kāi)發(fā)來(lái)說(shuō)。
我最近的工作是針對(duì)Settings-Sync作二次開(kāi)發(fā)
關(guān)于settings-sync插件,感興趣的可以參考我的博客園Settings-Sync源碼閱讀
如何實(shí)現(xiàn)一個(gè)mock server 替換github api地址并確保效果一致?
針對(duì)目前這個(gè)需求,我的實(shí)現(xiàn)思路如下:
- 第一,針對(duì)如何實(shí)現(xiàn)一個(gè)mock server ,可以復(fù)用已有,如mock-github-api(其本身是使用node.js的express框架);
- 第二,如何編寫(xiě),可以按照express框架編寫(xiě)網(wǎng)絡(luò)請(qǐng)求的方法,如app.get或app.use等;
- 第三,為了保持與githu api一致,我需要引入github rest api,如@octokit/rest;
參考api地址
示例一:
octokit.repos.listForOrg({
org: 'octokit',
type: 'public'
}).then(({ data, status, headers }) => {
// handle data
//console.log("status:"+JSON.stringify(headers));
//console.log(status);
console.log(data);
})
返回的octokit相關(guān)的api信息(信息太多了,就先簡(jiǎn)略)
示例二:
const clientWithAuth = new Octokit({
auth: 'token secret123'
})
console.log(clientWithAuth)//查看詳細(xì)信息
console.log(JSON.stringify(clientWithAuth))//輸出簡(jiǎn)要信息如下
所示:
返回的信息:
{"log":{},"activity":{},"apps":{},"checks":{},"codesOfConduct":{},"emojis":{},
"gists":{},"git":{},"gitignore":{},"interactions":{},"issues":{},"licenses":{},
"markdown":{},"meta":{},"migrations":{},"oauthAuthorizations":{},"orgs":{},
"projects":{},"pulls":{},"rateLimit":{},"reactions":{},"repos":{},"search":{},
"teams":{},"users":{},"gitdata":{},"authorization":{},"pullRequests":{}
}
第四,根據(jù)router.json(node_modules\@octokit\rest\plugins\rest-api-endpoints\routes.json)也就是octokit里面定義github rest api的地方(該文件定義了所需的所有的請(qǐng)求信息),我可以仿照其編寫(xiě)對(duì)應(yīng)的網(wǎng)絡(luò)請(qǐng)求(美其名依樣畫(huà)葫蘆);
如果要用一句簡(jiǎn)單直接的話來(lái)概述,模仿github rest api編寫(xiě)一個(gè)mock server來(lái)替換github,只要接口定義保持一致就可以。
但是目前存在一個(gè)問(wèn)題,我在此停滯不前。正在想辦法解決這個(gè)問(wèn)題。
這個(gè)問(wèn)題是,我參考其對(duì)應(yīng)的rest api文檔寫(xiě)代碼,但是其返回的信息卻并沒(méi)有我想要的,返回是一大堆沒(méi)有用處的function之類(lèi)的,而不是具體的信息。
但是以5why原則來(lái)看待這個(gè)問(wèn)題:
為什么github api會(huì)返回一大堆function?
這些function有什么用?github api不會(huì)無(wú)緣無(wú)故返回沒(méi)有用的東西
還有就是為什么console.log(clientWithAuth)返回詳細(xì)信息,console.log(JSON.stringify(clientWithAuth))返回的卻是簡(jiǎn)要信息呢?難道是因?yàn)榉荍SON數(shù)據(jù)嗎??jī)烧叻祷氐亩际荍SON數(shù)據(jù)
我查找JSON.stringify()認(rèn)為應(yīng)該是這個(gè)原因:
JSON.stringify() 方法是將一個(gè)JavaScript值(對(duì)象或者數(shù)組)轉(zhuǎn)換為一個(gè) JSON字符串,如果指定了replacer是一個(gè)函數(shù),則可以替換值,或者如果指定了replacer是一個(gè)數(shù)組,可選的僅包括指定的屬性(參考地址)
另外前面雖說(shuō)不講mock server的實(shí)現(xiàn)思路,但是還是要推薦一下一個(gè)開(kāi)源實(shí)現(xiàn)框架 moco。
github倉(cāng)庫(kù)地址為:https://github.com/dreamhead/moco
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Node.js的Express框架使用上手指南
- 從零開(kāi)始學(xué)習(xí)Node.js系列教程之基于connect和express框架的多頁(yè)面實(shí)現(xiàn)數(shù)學(xué)運(yùn)算示例
- node.js使用express框架進(jìn)行文件上傳詳解
- Node.js + express實(shí)現(xiàn)上傳大文件的方法分析【圖片、文本文件】
- node.js(express)中使用Jcrop進(jìn)行圖片剪切上傳功能
- 淺析Node.js實(shí)現(xiàn)HTTP文件下載
- Node.js 使用request模塊下載文件的實(shí)例
- Node.JS段點(diǎn)續(xù)傳:Nginx配置文件分段下載功能的實(shí)現(xiàn)方法
- 基于nodejs+express4.X實(shí)現(xiàn)文件下載的實(shí)例代碼
- nodejs+express實(shí)現(xiàn)文件上傳下載管理網(wǎng)站
- 使用nodejs+express實(shí)現(xiàn)簡(jiǎn)單的文件上傳功能
- node.js express框架實(shí)現(xiàn)文件上傳與下載功能實(shí)例詳解
相關(guān)文章
node基于async/await對(duì)mysql進(jìn)行封裝
這篇文章主要介紹了node基于async/await對(duì)mysql進(jìn)行封裝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06
使用puppeteer破解極驗(yàn)的滑動(dòng)驗(yàn)證碼
這篇文章主要介紹了利用puppeteer破解極驗(yàn)的滑動(dòng)驗(yàn)證功能,基本流程代碼實(shí)現(xiàn)給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-02-02
Nginx設(shè)置為Node.js的前端服務(wù)器方法總結(jié)
在本篇文章中小編給大家分享了關(guān)于Nginx設(shè)置為Node.js的前端服務(wù)器的方法和實(shí)例,需要的朋友們學(xué)習(xí)下。2019-03-03
nodejs實(shí)現(xiàn)一個(gè)自定義的require方法的詳細(xì)流程
大家對(duì)nodejs中的require方法應(yīng)該不會(huì)陌生,這個(gè)方法可以用來(lái)導(dǎo)入nodejs的內(nèi)置模塊,自定義模塊,第三方模塊等,使用頻率非常高,那么這個(gè)方法內(nèi)部是如何實(shí)現(xiàn)的呢?本篇文章就是從頭到尾拆分實(shí)現(xiàn)流程,最終實(shí)現(xiàn)一個(gè)自定義的require方法,需要的朋友可以參考下2025-03-03
寶塔部署nodejs項(xiàng)目的實(shí)戰(zhàn)步驟
前段時(shí)間部署node項(xiàng)目的時(shí)候出現(xiàn)了一點(diǎn)問(wèn)題,所以想著給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于寶塔部署nodejs項(xiàng)目的實(shí)戰(zhàn)步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Express框架搭建項(xiàng)目的實(shí)現(xiàn)步驟
Express是一個(gè)基于Node.js平臺(tái)的輕量級(jí)Web應(yīng)用框架,它提供了簡(jiǎn)潔的API和豐富的功能,本文主要介紹了Express框架搭建項(xiàng)目的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-06-06
Nodejs進(jìn)階:express+session實(shí)現(xiàn)簡(jiǎn)易登錄身份認(rèn)證
本篇文章主要介紹了Nodejs進(jìn)階:express+session實(shí)現(xiàn)簡(jiǎn)易身份認(rèn)證示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04

