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在中间件实现上的差异,以及它们如何影响实际应用。掌握这些知识不仅有助于解决面试中的相关问题,还能在日常开发中做出更明智的技术选择。