首页 > 解决方案 > Python 无服务器函数 Vercel - Next.js

问题描述

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

我浏览了文档并找到了一个输出日期的简单示例

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

他们在这里提供了一个现场工作的例子。

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

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

旧版本显然需要通过添加文件来配置无服务器功能vercel.json。但是现在这似乎没有必要了。

我错过了什么?

标签: pythonnext.jsvercel

解决方案


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

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

它还提到:

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

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

如果您按照他们提供的示例进行操作,您可能会继续在目录中以受支持的语言(JavaScript 除外)创建一个无服务器函数,pages/api并想知道为什么 Vercel 在您部署时没有选择它。

简而言之,如果您使用另一种语言在 Next.js 项目中编写无服务器函数。确保将其放在项目api目录中的文件夹中(如果没有,则创建一个)。

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

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


推荐阅读