Python无服务器功能Vercel-Next.js

时间:2020-08-29 21:38:38

标签: python next.js vercel

我发现我可以使用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文件夹中。但是,该功能永远不会被使用(下图): vercel function output

较旧的版本显然需要configuration of serverless functions by adding a vercel.json file。但这现在似乎没有必要。

我想念什么?

1 个答案:

答案 0 :(得分:2)

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

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

它还提到:

如果您要使用未与Node.js结合Next.js编写的无服务器功能,则可以将其放置在api目录(由平台提供)中,因为{ {1}}(由Next.js提供)仅支持JavaScript。

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

如果您遵循example they give,则可能继续进行操作,并在pages目录中以受支持的语言(JavaScript除外)创建了无服务器功能,并想知道为什么Vercel不选择它部署时。

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

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

注意:您只能有一个包含无服务器功能的api目录。根文件夹中有api目录或pages/api目录,不支持在单个项目中同时存在。