我想用 nextjs 写后端给 app 提供接口,会有什么坑吗?

2024-04-19 15:00:51 +08:00
 luckykelan

有一个业务比较杂,但普遍是增删改查的 app ,无网页端。 争取到了比较多的开发时间,实在写够 springboot 那一套了,想尝试一下新的。 请问各位可以用 nextjs 写接口给 app 提供服务吗,就是在 nextjs 连接数据库进行增删改查?会遇到什么坑吗

6488 次点击
所在节点    程序员
37 条回复
lstz
2024-04-19 15:09:43 +08:00
nextjs 最大特色是 ssr ,既然你不打算提供网页内容,为什么一定要用 next.js ?

一定想上的话,可以是可以,但我想 nextjs 对你要实现的功能来说,那样会有些重

我目前的开源项目 https://github.com/work7z/LafTools ,有一些后悔上了 Next.js ,主要原因如下:
- 要自行部署,得配 standalone 那套,感觉这 standalone 不是官方最倾向的,人家想你直接上 vercel
- 时不时会遇到 abortInComing 错误,从 12.x 到 14.x 都看到有这个错误抛出(官方为此 release 了几次但还是有),这对于稳定性来说实在不太能接受(再怎么样也不能整个应用都 crash 了吧)
- 想给你的 header 或者所有 http 请求加点逻辑?拦截器或者中间件啥的?可以,写 middleware ,但那玩意是 experienmental feature ,每次用都心惊胆战的

我再来一次的话,会考虑别的 ssr 框架了。对于你的需求,我建议 express 加 typescript 就 OK 了,可以参考我这个项目的 modules/server2 ,开箱即用
lstz
2024-04-19 15:11:39 +08:00
关于第二点 abortIncoming ,看了下 issue ,应该也是由 middleware 导致的
iOCZS
2024-04-19 15:21:05 +08:00
直接 koa 或 express 不就好了
Ayanokouji
2024-04-19 15:21:29 +08:00
没页面需求,还是用 springboot 吧,找个代码生成器。或者使用 go ,优势内存小,部署简单。
sjhhjx0122
2024-04-19 15:39:36 +08:00
纯写接口为什么不试试 nestjs
tianzx
2024-04-19 15:50:51 +08:00
@lstz #1 你这个用 Next.js 真的是高射炮打蚊子了。好处没用上,复杂度还上去了
SayHelloHi
2024-04-19 15:52:40 +08:00
可以看看 Elysia.js 或者 Nest.js 😄
lstz
2024-04-19 15:52:52 +08:00
@tianzx 对我来说好处就是 ssr+server action ,这些还是 OK 的,坏处就是定制型差,而且场景不太匹配就是说...
tianzx
2024-04-19 15:53:11 +08:00
Node : hono or elysia
Python : fastpai
Java: quarkus
tianzx
2024-04-19 15:55:44 +08:00
@lstz #8 他主要是解决 C 端 SEO 、服务端渲染的问题。你这个工具感觉大部分都得 use client 。个人觉得用 svelte kit 那一套可能更合适 。不一定对啊哈哈哈哈
lstz
2024-04-19 16:07:39 +08:00
@tianzx 可以的老哥,感谢建议哈哈哈

我是为了 seo 考虑和页面直出,所以用了 Next.js ,不过也确实到处都是 use client ,我到时候看看架构要不要调整下
xmumiffy
2024-04-19 16:08:56 +08:00
hono 或者 koa 就行了
helloet
2024-04-19 18:35:37 +08:00
推荐用 hono
ebushicao
2024-04-19 18:59:24 +08:00
nextjs 是个全栈框架,而且时偏前端的,你的需求完全没有网页端,那就根本不合适。
renkunn
2024-04-19 19:02:57 +08:00
Nitro 了解一下
ColdBird
2024-04-19 19:06:22 +08:00
nest/koa
jixiaopeng
2024-04-19 19:46:50 +08:00
我用它做 web 全栈,app ,小程序用的就是 next 接口 api ,对我来说非常好用。
Amose2024
2024-04-19 20:00:12 +08:00
@lstz 你没有弄懂 Nextjs ,完全可以做到一键部署的。另外 middleware 也并不是试用特性。
lstz
2024-04-19 20:04:44 +08:00
@Amose2024 一键部署指的是 vercel 那一套吗?确实是有,但我需要更高层次的定制,nextjs 满足不了(或者说场景不合适)

middleware 的 edge engine 确实是实验性质
lstz
2024-04-19 20:23:38 +08:00
@Amose2024

我用 Next.js 有一段时间,不算是大师哈,但踩的坑也不少,相对也懂一些,我在本贴提到的都是 [standalone] 模式的,关于其他默认模式的不在我探讨范围内。

之前写 middleware 的时候,引入了一些 npm 的库,按理来说是在 Node.js 上跑的应该都能编译,但 Next.js 就是不允许 middleware 上引用一些第三方的库,要不然就报错给你看。经过一些 issues 和官方人员的探讨和相关 workaround ,我才知道如果是 standalone 模式下要用 middleware ,你得配置如:

export const config = {
matcher: "/((?!api|static|.*\\..*|_next).*)",
runtime: "experimental-edge", // for Edge API Routes only
unstable_allowDynamic: [
"/node_modules/lodash/**",
"./node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/lodash.js",
],
};


而这个又正好是实验性特性(正如你每次跑 dev 都会提示你的一样: ⚠ You are using an experimental edge runtime, the API might change.)

反正我就一个写代码的,懒得翻源码看,就这么先写着先,对于楼主和我的场景来说,Next.js 都不合适 :P

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1033948

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX