Объединить несколько маршрутов в одну бессерверную функцию в Vercel с помощью Python?

В настоящее время у меня есть приложение Nextjs с бэкэндом python api. Проблема, с которой я сталкиваюсь, заключается в том, что Vercel имеет ограничение в 24 бессерверных функции, и они, кажется, рекомендуют комбинировать бессерверные функции, чтобы оптимизировать ваши функции и избежать холодных запусков.

В настоящее время у меня есть следующий код

from sanic import Sanic
from sanic.response import json
app = Sanic()


@app.route('/')
@app.route('/<path:path>')
async def index(request, path=""):
    return json({'hello': path})

@app.route('/other_route')
async def other_route(request, path=""):
    return json({'whatever': path})

Однако, когда я нажимаю api/other_route, я получаю 404. Я знаю, что могу создать отдельный файл с именем other_route.py. Но мне было интересно, есть ли способ объединить этот маршрут в моем index.py маршруте, чтобы избежать создания другой бессерверной функции.


person Kalimantan    schedule 21.06.2020    source источник


Ответы (1)


Вам необходимо создать конфигурацию vercel в корне вашего проекта vercel.json

{
    "routes": [{
        "src": "/api/(.*)",
        "dest": "api/index.py"
    }]
}

Это направляет все запросы на /, который является экземпляром Sanic. После этого Саник знает, как перейти к обработчику. Вам также следует изменить аргумент пути в other_route методе на path="other_route"

person SeanAye    schedule 24.06.2020
comment
Маршрутизация на src: /(.*) перезаписывает маршрутизацию Nextjs, чего не хотелось бы делать. Следует направлять только на маршруты / api. Я попытался изменить источник на src: /api/(.*), но это не сработало. - person Kalimantan; 25.06.2020
comment
О да, я должен был включить это. В моем проекте vercel используется исключительно для функций, а не для SSG, поэтому в моем случае это работает. - person SeanAye; 29.06.2020