koa2項目制定伺服器地址
❶ Vercel部署Node服務
引子之前在寫面試常客:HTTP緩存時,曾經就強緩存和協商緩存寫過兩個demo,但緩存要在服務端做,只能貼上代碼,不能在網頁上感受(雖然我貼了gif)
筆者的所有demo例子都放在githubpage上,其特點是不需要伺服器即可部署靜態資源,但它不具備部署服務端應用能力
最近筆者在了解CI/CD方面的知識點,想起了Vercel,就想著能否將服務端應用架在vercel上呢?
Vercel是什麼Vercel是一個開箱即用的網站託管平台,方便開發者快速部署自己的網站。它在全球都擁有CND節點,因此比Github官方自帶的githubpages更加穩定,訪問速度更快
Koala聊開源曾經對其有過介紹:Vercel與Next.js:開源全明星團隊背後的商業邏輯
文字版:Vercel與Next.js:開源全明星團隊背後的商業邏輯
簡單的說,它能極簡部署應用到服務端,且是免費不用買伺服器
官網Vercel官網
Vercel工作流官網(網頁效果炫酷)
常見命令行將Vercel下載到全局(npmivercel-g),不知道有什麼命令就-h
筆者對其了解有限,這里羅列下筆者知道的命令
vercellogin:登錄Vercel賬號
verceldev:本地開啟服務
verceldev--bug:本地開啟服務並列印日誌
vercel:部署本地資源到Vercel上
vercel--prod:更新本地網頁
vercel可以用vc來代替,vc是Vercel的縮寫
部署靜態服務我們現在已經對vercel有所了解,前文中說到Vercel能簡化開發者部署服務,那它能簡化到什麼程度呢?
這里我們從零部署一個簡易靜態服務
本地安裝Vercel
npm?i?vercel?-g登錄Vercel
vercel?login選擇好連接的方式後,會在網站彈出
喲喲,man。what'syourname?
創建一個HTML文件,後續我們要將其上傳至Vercel伺服器上
<!DOCTYPE?html><html?lang="en"><head>????<meta?charset="UTF-8">????<meta?http-equiv="X-UA-Compatible"?content="IE=edge">????<meta?name="viewport"?content="width=device-width,?initial-scale=1.0">????<title>Vercel?Demo</title></head><body>????<h1>Vercel?Demo</h1></body></html>本地測試一番,輸入命令行
vercel?dev因為我們這是第一次執行,根目錄下沒有.vercel,所以要填寫一些必要信息,這時你的本地和Vercel伺服器就綁定好了
部署服務
vercel在https://vercel-sample-ten.vercel.app/中能訪問到我們的靜態服務
在截圖中我們也看到了這句話Deployedtoproction.Runvercel--prodtooverwritelater,後續我們要更新資源,用vercel--prod即可
好了,除去必要的登錄,我們就用了三個命令就把本地服務部署到Vercel伺服器上
verceldev:開發時使用,查看應用是否跑得起來
vercel:部署服務
vercel--prod:更新應用(資源)
可以登錄Vercel後台查看部署情況
部署Node服務回歸主題,最終我們想部署的是Node服務,是後端服務,而非前端靜態資源服務,這是關鍵
同樣建立新項目
mkdir?vercel-koa2cd?vercel-koa2npm?init?-ynpm?i?koa?-Stouch?index.js編寫index.js中的內容
const?Koa?=?require('koa');const?app?=?new?Koa();app.use(async?ctx?=>?{????ctx.body?=?'Hello?Vercel'});app.listen(3008,?()?=>?{????console.log(項目啟動')});PS:3000埠默認會被Vercel使用,所以Koa服務要換個埠
使用命令verceldev
發現給我報錯了,理由是package.json的scripts中沒有build快捷符,修改之
..."scripts":?{????"build":?"node?index.js",},...再次使用verceldev,node服務跑起來了
於是乎我們部署它
vercel搞半天沒部署上去,後台查看也是無果,嗚呼悲哉
google後,發現原來還有一個vercel.json,可以用vercel.json配置和覆蓋vercel默認行為
下載@vercel/node包
npm?i?@vercel/node?-S填寫配置:
{??"version":?2,??"builds":?[????{??????"src":?"index.js",??????"use":?"@vercel/node"????}??]}執行vercel部署服務
訪問地址:https://vercel-koa2-t511069160.vercel.app
至此,就完成了Koa服務的部署
與部署靜態資源多了兩個步驟
下載@vercel/node和配置vercel.json
延伸思考Vercel當然不止筆者所說的這一功能,它還可以自定義域名、serverless、全球支持的CDN等等
可以毫不誇張地說,用Vercel來代替繁瑣的雲伺服器,配合GithubAction做CI/CD,就
個人開發者或小團隊而言,這或許就是神器
後續筆者也會嘗試用Vercel部署一些小應用,實踐出真理
附上項目地址:https://github.com/johanazhu/vercel-demo
參考資料Vercel搭建API服務,無需伺服器
Vercel與Next.js:開源全明星團隊背後的商業邏輯:文字版
Vercel與Next.js:開源全明星團隊背後的商業邏輯:視頻版
原文:https://juejin.cn/post/7094911994226016292
❷ 如何評價 Node.js 的koa框架
koa2 完全拋棄了generator和co的做法,而是使用async/await來做非同步開發。
## 不同
1. koa和express在表現上的一點不同是採用ctx一個參數來調用中間件,而不是express的req, res。
其實在使用上還是個人認為是更方便了的。
2. 然後是在中間件連接的方式上有所不同。
express的設計是串聯的,設計思路超級簡潔。
koa的某一個中間件可以自行選擇之後中間件的執行位置的。
## 舉例
比如一個伺服器處理時間/日誌的中間件的開發:
express:request
進來,記錄時間到request._startTime上。綁定一個函數到response的'end','finish'以及
response.socket的'error','close'事件上。那個函數會用當前時間和startTime做差,算出運行時間。
koa2:
```js
const xTime = async (ctx,next)=>{
let start = new Date
await next()
ctx.set('X-Response-Time', (new Date) - start) + 'ms')
}
```
這是在功能開發上,在錯誤處理上的友好度就更高了。
沒有特意抹黑express的中間件開發,那個express版的計時器是express自帶的伺服器日誌中間件morgan的實現。
## 社區
express的社區還是大。
koa本來就小,還被從koa1轉koa2一折騰,就更小了。
而現在koa2還在alpha版,koa及其插件的開發速度比較沒有保證。
你找到一個中間件,如果是express的,得轉過來。如果是koa的,一般也得再轉一次。
比如我使用的passportjs,github有koa版koa-passport,就分koa1版本和koa2版本的,選擇時得注意一下。
## 個人評價
koa2好用,設計上的確有優勢。優勢不在能實現更強的功能,而是可以更簡單地完成功能。
koa2社區遠不如express,原因之一是~~因為koa2的正式版離發行估計還得3~6個月。~~koa的正式版是koa1。
koa1在思想上與koa2是一致的,但是koa2的實現更漂亮。
有koa1到koa2的中間件封裝函數`koa-convert`。
❸ 微信小程序真機調試時後台是本地伺服器,顯示「未能連接到伺服器」
最近自己做了兩個小的demo,前端是微信小程序的,後端是node+koa2實現的,順便把微信小程序相關知識學習一下,大家有什麼問題可以一起討論,謝謝。
這次記錄的是 真機調試是後台是本地伺服器,顯示未能連接到伺服器 的問題。
在小程序開發時我們為了方便而不去搭建域名,在本地直接localhost就可以使用本地的伺服器,但是小程序要求是https的域名才可以使用,所以我們在開發時要勾選詳情裡面的 不校驗合法域名、web-view(業務域名)、TLS 版本以及 HTTPS 證書 這一項,這就可以在小程序的開發者工具上看效果了。
但是想要真機調試而且使用本地伺服器做後台提供數據的話,需要滿足以下幾點:
其實是個小問題,注意一下就可以了。
❹ 再也不怕面試官問你express和koa的區別了
本文對比了Express.js和Koa2在中間件實現方式上的不同。起初,Express.js憑借其精妙的中間件設計受到青睞,但深入了解其源碼後,發現其設計復雜度與現代JavaScript標准不符。相比之下,Koa2的代碼簡潔高效,僅用幾個文件就能實現中間件功能,代碼可讀性強。
為了直觀展示使用方法的差異,本文提供了Express.js和Koa2啟動簡單伺服器的代碼示例,以及它們在初始化、路由掛載等方面的對比表格。
接下來,本文深入探討了Express.js中間件的實現原理。通過一個示例代碼,揭示了非同步處理導致的執行流程混亂。Express.js中間件的掛載方式多樣,通過多個實例變數進行數據模型構建。中間件初始化涉及到Layer實例的映射,理解這一點有助於掌握Express.js的中間件處理邏輯。本文詳細解釋了router.use和router.route方法的工作原理,以及它們如何影響中間件初始化和執行。
在表達邏輯方面,Express.js的中間件執行採用遞歸調用形式,而Koa2的中間件處理則簡化為一個函數調用。這種設計使得Koa2的代碼更加簡潔高效,保持了其精簡彪悍的風格。
總結而言,本文通過對比分析幫助讀者深入了解Express.js和Koa2在中間件實現上的差異,以及它們如何影響實際應用。掌握這些知識不僅有助於解決面試中的相關問題,還能在日常開發中做出更明智的技術選擇。