我发现我可以使用 Python 在内部创建一个无服务器函数Next.js https://nextjs.org/docs/getting-started项目。一旦部署到Vercel https://vercel.com/,它将被转换为无服务器函数。
我浏览了文档并找到了简单的例子 https://vercel.com/docs/serverless-functions/supported-languages#python输出日期:
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 https://python-api.now-examples.now.sh/api/date.
显然所需要做的就是放置文件date.py
在 - 的里面api
启动的 Next.js 项目的文件夹中,您就可以开始比赛了。部署后,Vercel 将检测 Python 文件并将其作为无服务器函数提供。
The deploy succeeded and I placed the file inside the pages/api
folder as required. However, the function is never picked up (image below):
旧版本显然需要通过添加以下内容来配置无服务器功能vercel.json file https://vercel.com/docs/configuration#project/functions。但现在看来没有必要了。
我缺少什么?
浏览完常见问题解答后。我找到了一个名为无与伦比的功能模式 https://vercel.com/docs/platform/frequently-asked-questions#unmatched-function-pattern, 它指出:
函数属性对每个键使用一个全局模式。此模式必须与 Serverless Function 源文件匹配api
目录。
它还提到:
如果您想使用不是用 Node.js 与 Next.js 结合编写的无服务器函数,您可以将其放在api
目录(由平台提供),因为pages/api
(由 Next.js 提供)仅支持 JavaScript。
我认为这需要澄清一下。确实有默认的api
引导 Next.js 项目时的文件夹create-next-app
,但它是在内部创建的pages
目录。
如果您遵循他们给出的例子 https://vercel.com/docs/serverless-functions/supported-languages#python,您可以继续使用受支持的语言(JavaScript 除外)在pages/api
目录并想知道为什么 Vercel 在部署时没有选择它。
简而言之,如果您正在使用另一种语言来编写无服务器函数 https://vercel.com/docs/serverless-functions/supported-languages在 Next.js 项目中。请务必将其放入api
位于的文件夹root项目的目录(如果没有,则创建一个)。
感谢@evgenifotia 的建议,它为我指明了正确的方向并帮助我解决了这个问题。
Note: 只能拥有一个api
包含无服务器功能的目录。要么你有一个pages/api
目录或api
根文件夹中的目录,将两者放在一个项目中是not支持的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)