Python 无服务器函数 Vercel - Next.js

Posted

技术标签:

【中文标题】Python 无服务器函数 Vercel - Next.js【英文标题】:Python Serverless Function Vercel - Next.js 【发布时间】:2020-12-18 11:08:09 【问题描述】:

我发现我可以使用 Python 在 Next.js 项目中创建一个无服务器函数。一旦部署到Vercel,它将被转换为无服务器函数。

我浏览了文档并找到了一个输出日期的simple example:

from http.server import BaseHTTPRequestHandler
from datetime import datetime

class handler(BaseHTTPRequestHandler):

  def do_GET(self):
    self.send_response(200)
    self.send_header('Content-type', 'text/plain')
    self.end_headers()
    self.wfile.write(str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')).encode())
    return

他们提供了一个实时工作示例here。

显然,只需将文件 date.py 放在引导的 Next.js 项目的 api 文件夹中,您就可以开始比赛了。部署后,Vercel 将检测 Python 文件并将其作为无服务器函数提供。

部署成功,我根据需要将文件放在pages/api 文件夹中。但是,该功能永远不会被拾起(下图):

旧版本显然需要configuration of serverless functions by adding a vercel.json file。不过现在看来没必要了。

我错过了什么?

【问题讨论】:

如果您将 api 文件夹放在 pages 文件夹中,请尝试将其移出 @evgenifotia 当您使用create-next-app 生成一个新应用程序时,它会自动在pages 内创建一个api 文件夹。 你用烧瓶试过了吗? 【参考方案1】:

查看常见问题解答后。我找到了一个名为 Unmatched Function Pattern 的条目,它指出:

functions 属性为每个键使用一个全局模式。此模式必须与 api 目录中的无服务器函数源文件匹配。

它还提到:

如果你想使用不是用 Node.js 编写的 Serverless Function 与 Next.js 结合使用,你可以将它放在 api 目录中(由平台提供),因为 pages/api (由 Next.js 提供)仅支持 javascript

我认为这需要澄清一下。当您使用 create-next-app 引导 Next.js 项目时,确实有一个默认的 api 文件夹,但它是在 pages 目录中创建的。

如果您关注example they give,您可能会继续在pages/api 目录中以受支持的语言(JavaScript 除外)创建一个无服务器函数,并想知道为什么 Vercel 在您部署时没有选择它。

简而言之,如果您在 Next.js 项目中使用 another language to write a serverless function。请务必将其放在项目 root 目录中的 api 文件夹中(如果没有,请创建一个)。

感谢@evgenifotia 的建议,它为我指明了正确的方向并帮助我解决了这个问题。

注意:您只能拥有一个包含无服务器功能的 api 目录。您在根文件夹中有pages/api 目录或api 目录,支持将两者放在一个项目中。

【讨论】:

这种情况下常规的nodejs功能还能继续工作吗? Node.js 函数将在位于pages 内部或外部的api 目录中运行。 对不起,我的目标是在一个项目中同时使用 nodejs 和 python 函数。我应该把它们都放在父文件夹api 中还是可以有一个api 和另一个pages/api 文件夹? 在项目的根目录中有一个 api 文件夹。这样你就可以使用 Node.js 和 Python 函数了。

以上是关于Python 无服务器函数 Vercel - Next.js的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Vercel 上使用 serverSideTranslations

错误:命令“npm run build”以 1 退出。vercel deploy 错误与 next.js

Nextjs api“pages/api”在 vercel 服务器上不起作用

WebSocket SocketIO 连接不适用于 Heroku 上的 NestJS 服务器并在 Vercel 上反应客户端

为啥我的自定义 Nextjs 服务器在我的 Vercel 部署中不起作用?

Vercel 上 Nextjs 应用程序中的 CORS