后端数据终于搞定第一个 next.js 全栈项目,解决自己的拖延症

322 阅读5分钟

起因

起因是自己半年前脑袋一热买了几个 .ai 域名,当时想着做导航站来着,一直没做。

刚开始也总找借口,比如觉得自己之前是在外企搞大数据的,虽然对海外 GA 、GCP/AWS 、Hubspot 这些挺熟,但是没写过前端,讨厌前端切图/一点点调 UI ,没研究看清导航站的前途等等借口。

总是想等到一切都完美,其实也是一种严重的拖延,其实永远等不到完美的时候。**

上周末早上在公园边跑步边听播客的时候,听到一个说法说👇

当你要做决定时,就去散步/跑步,因为人在前进时做决定,脑袋会想到往前看,做的决定也会更往前看。**

于是终于决定要马上动手,在未动手时,信息永远不足,会看不清,但是行动会带来新的信息,会看得更清。

回家先马上开始写下第一行代码,一直信奉 站在巨人的肩膀上,自己订阅了/收藏整理了不少优质小报童专栏,像少楠、Light、纯银等很多优质创作者都在小报童开了专栏。

所以第一个站就拿小报童专栏导航站练手吧。

上线

今天差不多了,先发 MVP 上线:小报童精选专栏导航站: 👉🏻xiaobot.store👈🏻

home.webp

应该是市面上专栏数据最多的小报童导航站了,而且加了搜索和自己精心打的搜索标签,毕竟以前是搞数据的嘛,,,打标签熟门熟路了😝

因为时间很仓促,很多技术栈是刚学的,还有很多不足请大家反馈哈,听劝

比如:

  1. 1️⃣ UI 方面,移动端体验还不够好,往下滑专栏太多了,用户想重新搜索得往上滑挺久,应该得加一个直达搜索的地方(还没学会)
  2. 2️⃣ 有一些“原价 9999 ,现金 19.9”的坏风气专栏,计划加一个过滤项帮大家按需过滤一下
  3. 3️⃣ 一般搜索的时候,都会有按照某些字段排序的需求,比如内容数、更新时间等,还没来得及加上

技术栈

在写代码前,以下很多技术栈自己还完全不会,但是没关系,Learning by Doing!!!,不要给自己找借口

  1. 全栈:Next.js14
  2. Database: Postgresql on Supabase
  3. ORM:Prisma
  4. UI: Tailwind CSS
  5. 部署:Vercel
  6. 域名解析:Cloudflare

实践下来,这一套是真的快,Vercel&&Cloudflare 真是赛博活佛,代码 merge 到 Github 主分支后,Vercel 直接部署,5min 后最新代码就可以直接访问了。

之前用国内阿里云的 ECS ,得自己写 CI/CD 脚本,每次部署还得花很多时间。。。

除了域名花了点钱,Vercel&&Cloudflare 都完全 free plan 搞起。

Next.js14 几个关键技术

0. Next.js 代码脚手架

Vercel 官网有很多很友好的 starter template,比如海外支付必备的 Stripe Starter template,我因为用到 Supabase 的数据库,直接 npx create-next-app -e with-supabase 就可以 clone 下来脚手架,很方便。

image.png

1. 静态页面生成

考虑到小报童很多专栏数据并不是经常更新,比如作者介绍等,于是考虑用上了 Next.js generateStaticParams + 动态路径,大家注意了

Next.js 14 才有 generateStaticParams!!!!

Next.js13 用的是 getStaticProps

动态路径由 Next.js 的文件夹约定解析,代码文件在地址栏会被解析为👇:

ExampleURLparams
app/shop/[slug]/page.js/shop/1{ slug: '1' }
app/shop/[category]/[item]/page.js/shop/1/2{ category: '1', item: '2' }
app/shop/[...slug]/page.js/shop/1/2{ slug: ['1', '2'] }

举例:

ExampleURLtilte
app/p/[slug]/page.tsxhttps://xiaobot.store/p/shengcaiyoushu奕仁-生财有数项目精选
app/p/[slug]/page.tsxhttps://xiaobot.store/p/mediabuy静水流深-AI海外赚钱
app/p/[slug]/page.tsxhttps://xiaobot.store/p/cardflomo Team-笔记的方法
app/p/page.tsxhttps://xiaobot.store/p/小报童专栏精选Top100创作者集锦

大家可以看到,Next.js 是根据文件结构的约定来生成页面的,如果 page.tsx 中包含 generateStaticParams,那该页面就会被解析为静态页面,在 pnpm run build 时被渲染为静态页面。

理解文件结构约定+generateStaticParams这两点对搞懂 Next.js 很重要。

站点收录提交

站点提交这个真的完全不 scale 的一个活,每个搜索引擎都得注册、验证、提交 URL ,而且有不少坑,大家可以关注一下👇

而且在提交这点上,国内国外体验差距真的挺大的

国外比较知名就是 GSC(Google Search Console) 和 Bing ,GCS 可以 CNAME 验证站长,很快验证通过,Bing 可以从 GSC 已经验证过的站直接 import (不过不知道为啥,刚刚一直导入失败)

国内百度、搜狗、头条、360 搜索这几个,体验最好的是头条搜索,很快验证通过。百度不知道为啥,文件验证、Meta 验证一直失败,而且和搜狗/360/百度一样,都没有 CNAME 验证。

提醒: 搜狗、360 搜索验证站点都需要域名 ICP 备案 + 申请材料,不然验证了网站根目录也不收录。很麻烦,练手站就不搞了。

所以以后每次验证,都得改代码重新部署,有 CNAME 可以不用重新部署这点挺友好。

大家有计划提交国内站点真的注意哈,部署前提前搞好验证文件或者 meta