python - 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.json
。但是现在这似乎没有必要了。
我错过了什么?
解决方案
在浏览了常见问题解答之后。我找到了一个名为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
将两者都放在一个项目中。
推荐阅读
- python - 来自 Django Channels 的外部 API 请求
- python - 如何进行收集绝对最大点数的遍历?
- python-3.x - 错误 psycopg2.OperationalError: fe_sendauth: 即使在 postgres 授权连接之后也没有提供密码
- function - 对于 Delphi 10.2.3:如何创建 unit.someproperty.anotherproperty.mymethod(myvariable: variabletype): variabletype;?
- python - 如何为其他夹具的每次运行运行一次夹具
- visual-studio-2017 - 如果 csproj 总是强制最低版本,那么版本范围的意义何在?
- scala - 对 mixin 的类型参数的推断
- php - 速记检查变量是否设置并将它们回显到输入字段的值
- android - 在应用程序上将 android 联系人与注册用户链接
- python - Python 3.x:从两个字典创建数据框