Next.js v14 Server Action
2023-12-1
| 2023-12-1
字数 642阅读时长 2 分钟
beizhu
type
Post
status
Published
date
Dec 1, 2023
slug
summary
Server Action服务器上运行的函数,但我们可以从客户端调用它,就像普通函数一样。它允许我们在服务器上运行代码,而无需创建 API 端点
tags
Next.js
category
技术
icon
password
notion image
 

WHAT?

Server Action服务器上运行的函数,但我们可以从客户端调用它,就像普通函数一样。
它允许我们在服务器上运行代码,而无需创建 API 端点
对于 Next.js 开发者来说,这是一个全新的 DX,它可能改变游戏规则。

can?

  • 写入数据库: 您可以直接从客户端写入数据库,而无需创建 API 端点 - 只需在服务器操作中定义逻辑即可。
  • 服务器逻辑: 执行任何与服务器相关的业务逻辑,例如发送电子邮件、创建文件等。
  • 调用外部 API: 您可以直接从服务器操作调用外部 API,而无需创建 API 端点
 
可能会有一些优势
  1. 无需创建 API 端点:您无需创建 API 端点即可运行服务器代码。
  1. 跳转到函数:您只需在代码编辑器中单击服务器操作即可跳转到它的定义,而无需在代码库中搜索它。
  1. 类型安全:您可以使用 TypeScript 定义服务器操作的参数和返回值,Next.js 将自动为您验证它们。
  1. 更少的代码:您可以编写更少的代码,因为您需要更少的样板来运行服务器代码 - 您只需定义一个函数及其参数 - 然后从客户端调用它。
 

How

 
example1:
example2:
notion image
 
这个server action 的执行是是使用HTTP流发送的。
会有一些需要注意的点
  • 使用POST方法,
  • 需要一些标头,例如Next-Action包含某种服务器操作 ID 的标头,
  • 获取要从请求正文传递给函数的参数(作为 JSON)。
 
curl 'http://localhost:3000/xxxxxx/xxxx' \ -H 'Accept: text/x-component' \ -H 'Cache-Control: no-cache' \ -H 'Connection: keep-alive' \ -H 'Next-Action: 0e6d574cf350537e5c09a5ffd6492e04b5af9326' \ -H 'Next-Router-State-Tree: %5B%22%22%2C%7B%22children%22%3A%5B%22(withLayout)%22%2C%7B%22children%22%3A%5B%22xxxx%22%2C%7B%22children%22%3A%5B%22xxxx%22%2C%7B%22children%22%3A%5B%22__PAGE_%22%2C%7B%7D%5D%7D%5D%7D%5D%7D%5D%7D%2Cnull%2Cnull%2Ctrue%5D' \ -H 'Next-Url: /tools/gitee' \ -H 'Origin: http://localhost:3000' \ -H 'Pragma: no-cache' \ -H 'Referer: http://localhost:3000/xxxxxx/xxxx' \ --data-raw '[{"componentName":"xxx"}]' \ --compressed

返回结果为:
notion image
原理其实就和我们远程过程调用 (RPC)一样。
 
 

Last

 
但我也在想,你都这样传输了,安全性怎么保证,以前的router handler 你可以有中间件的方式至少去整体校验安全性。这样你也得校验所有传输过来的参数,这个取决于使用场景,但是这么个使用,安全性上一定是需要注意的。
  • Next.js
  • Docker简易持久化Next.js应用日志Prisma初探
    Loading...