超好用的 Serverless 尝鲜还有自定义 404 问题,提供 Serverless 示例。
2020年4月21日 ZEIT 更名为 Vercel 服务不变。
ZEIT(Vercel) 是一家云部署服务的公司,支持静态托管以及 Serverless 服务。
- 免费自定义域名,支持 HTTPS
- 提供 Serverless 服务
- 提供 Google Cloud 与 AWS 节点,有香港与台湾节点
- 免费空间的额度有 20 GB,够用
- 不限站点与 Serverless API 数量
- Serverless 支持 Node.js, Go, Python, Ruby
- 支持 now.sh CLI,GitHub,GitLab,Bitbucket 导入/部署
大陆访问 ZEIT 是最快的!比 Netlify 和 Github Pages 以及 Heroku 都快。注意线路问题,电信走香港、台湾线路,联通移动会绕美国。
ZEIT (Vercel) 托管静态博客网站
注册账号
前往 ZEIT(Vercel),通过 Github、GitLab 或 Bitbucket 账号登录,也支持 邮箱登录.
导入站点
点击 Import Project 支持从现有的 GitHub,GitLab 或 Bitbucket 存储库导入,也可以使用热门模板。
此处选择从 Github 导入,我选择的是用静态博客程序Hexo 编译后的静态文件仓库,如果你选择的是源码仓库可以在最后一步定义编译命令与输出目录,每次代码仓库更新后,将自动触发部署。
ZEIT 模板很多,包括 Hexo 在内的有:
Next.js
Gatsby
Hexo
Eleventy
Docusaurus 2
Docusaurus 1
Preact
Dojo
Ember
Vue.js
Scully
Ionic Angular
Angular
Polymer
Svelte
Ionic React
Create React App
Gridsome
UmiJS
Sapper
Saber
Stencil
Nuxt.js
Hugo
Jekyll
Brunch
Middleman
自定义域名
ZEIT 会为每个项目分配一个 now.sh的子域名,也可以绑定你自己注册的域名。
在项目主页点击 Settings -> Domains,进入自定义域名:
- 可以编辑 now.sh 分配给你的域名,如果是纯 API 站点可以选择一个 *.now.sh 漂亮的子域名,更改后以该域名访问即可。
- 添加自定义域名如:wivwiv.com,添加后可以选择重定向与指向的分支
- 默认指向 master 分支,即访问 master 分支下的内容
- 添加域名后需要将你的域名 NameServer 改为 ZEIT 的以便添加解析与证书(不建议),建议使用 CNAME 解析
- 在域名商那里将你自己域名以CNAME 记录解析到 alias.zeit.co
ZEIT (Vercel) 使用 Serverless
使用 ZEIT Now 可以部署 Serverless(无服务器)功能,不限量接收 HTTP 请求并提供响应。
ZEIT Serverless 支持 Node.js, Go, Python, Ruby 语言。
借助 Serverless 可以处理用户身份验证,表单提交,数据库查询,统计等业务。
开始开发
安装 now:
yarn global add now@latest |
安装 Serverless 库(Typescript 开发时):
yarn add @now/node |
例如,要创建 TypeScript 函数,可以创建一个 ./api/get-user.ts 文件:
// api/get-user.ts |
使用 js 则直接:
// api/get-user.js |
Request 和 Response 对象类似 express
路由
默认情况下,ZEIT 使用文件路由系统, 按照 /api
目录内的所有文件将按照文件进行映射,如访问 /api/get-user
时将执行 ./api/get-user.ts
的函数功能。
如果不需要这种规则,可以跟文件和文件夹添加前缀 _
或.
,以防止将文件或文件夹创建为无服务器功能。
列如将工具函数放置/api/_utils
内,则不会将它们创建为无服务器函数路由。这是因为其父文件夹的前缀是_
:
文件 | 路由 |
---|---|
./api/get-user.ts | /api/get-user |
./api/user/login.ts | /api/user/login |
/api/_db/index.ts | 无法访问,使用了前缀 |
/api/user/_login_service.ts | 无法访问,使用了前缀 |
引入 npm 依赖
如果需要在 ZEIT 中引用了其他 npm 依赖比如 mongoose,mysql2 甚至是 dateformat,只需要在 package.json 中添加即可, ZEIT 部署时会安装依赖,启动时直接使用。
不同于 Heroku 还提供额外的数据库等外部资源服务,ZEIT Serverless 需要的存储、数据库等资源需要自备且保证公网访问,后文总结了一些靠谱免费数据库服务商。
示例:获取指定 IP 或客户端 IP 信息
在线示例:
https://zeit-serverless-node-demo.bigpar.now.sh/api/ipinfo
https://zeit-serverless-node-demo.bigpar.now.sh/api/ipinfo?ip=119.119.119.119
// yarn add axios |
ZEIT SPA 与自定义 404
之前用的 Netlify,使用 /_redirects
文件自定义页面路由:
/c/* /c/index.html 200 |
同理 ZEIT 托管 SPA 如 Vue 单页面应用且使用 history 模式时,需要将 ZEIT 404 页面自定义为对应的 index.html 才能正常使用。
我的站点用到 SPA 的地方都是子目录,如 /c
之类的,这里找了好多坑,最后方案如下:
根目录下新建 now.js
文件,用于配置 build 过程与自定义路径:
{
|
No comments:
Post a Comment