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

244 天前
 luckykelan

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

5032 次点击
所在节点    程序员
37 条回复
lstz
244 天前
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
244 天前
关于第二点 abortIncoming ,看了下 issue ,应该也是由 middleware 导致的
iOCZS
244 天前
直接 koa 或 express 不就好了
Ayanokouji
244 天前
没页面需求,还是用 springboot 吧,找个代码生成器。或者使用 go ,优势内存小,部署简单。
sjhhjx0122
244 天前
纯写接口为什么不试试 nestjs
tianzx
244 天前
@lstz #1 你这个用 Next.js 真的是高射炮打蚊子了。好处没用上,复杂度还上去了
SayHelloHi
244 天前
可以看看 Elysia.js 或者 Nest.js 😄
lstz
244 天前
@tianzx 对我来说好处就是 ssr+server action ,这些还是 OK 的,坏处就是定制型差,而且场景不太匹配就是说...
tianzx
244 天前
Node : hono or elysia
Python : fastpai
Java: quarkus
tianzx
244 天前
@lstz #8 他主要是解决 C 端 SEO 、服务端渲染的问题。你这个工具感觉大部分都得 use client 。个人觉得用 svelte kit 那一套可能更合适 。不一定对啊哈哈哈哈
lstz
244 天前
@tianzx 可以的老哥,感谢建议哈哈哈

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

middleware 的 edge engine 确实是实验性质
lstz
244 天前
@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