DokumentasiIkhtisar

Berasal dari kerangka lain

Nexy adalah FastAPI plus perutean berbasis file, halaman yang dirender oleh server, dan pulau opsional React, Vue, Svelte, Solid atau Preact. Halaman ini memetakan apa yang sudah Anda ketahui.

Setiap kerangka kerja di bawah ini juga memiliki halamannya sendiri, tugas demi tugas, dengan kode yang Anda ketahui dan kemudian kode Nexy:

Dari FastAPI

FastAPI Nexy
@app.get("/users") dalam modul yang Anda impor GET berfungsi di src/routes/users.py
app.include_router(router) jalur file adalah URL; tidak ada yang perlu didaftarkan
Parameter jalur /users/{id} src/routes/users/[id].py
Depends(...) still Depends(...): penangan adalah FastAPI penangan
Jinja2 TemplateResponse halaman .nexy di sebelah titik akhir
Jalankan dengan uvicorn main:app nx dev, lalu nx build && nx start

Segala sesuatu di bawah src/routes/*.py adalah FastAPI biasa: dependensi, model Pydantic, middleware, dan /docs tetap berfungsi.

Titik akhir yang sama, sebelum dan sesudah:

main.py
from fastapi import FastAPI app = FastAPI()  @app.get("/users/{id}")async def get_user(id: int):    return {"id": id}
src/rute/pengguna/[id].py
async def GET(id: int):    return {"id": id}
FastAPI Nexy
@app.get("/users") dalam modul yang Anda impor async def get(self) di kelas @Controller("/users")
app.include_router(router) pengontrol yang terdaftar di controllers dari @Module
Parameter jalur /users/{id} @Controller("/users/{id}"), dengan async def get(self, id: int)
Depends(...) still Depends(...): metode pengontrol adalah titik akhir FastAPI
Jinja2 TemplateResponse useViews("src/apps/....nexy"), dikembalikan dengan metode
Jalankan dengan uvicorn main:app nx dev, lalu nx build && nx start

Dependensi, model Pydantic, middleware, dan /docs tetap berfungsi.

Titik akhir yang sama, sebelum dan sesudah:

main.py
from fastapi import FastAPI app = FastAPI()  @app.get("/users/{id}")async def get_user(id: int):    return {"id": id}
src/apps/users/user_controller.py
from nexy.decorators import Controller  @Controller("/users/{id}")class UserController:    async def get(self, id: int):        return {"id": id}

Dari Next.js

Next.js Nexy
app/page.tsx src/routes/index.tsx atau index.nexy
app/blog/[slug]/page.tsx src/routes/blog/[slug].tsx
app/layout.tsx (memiliki <html>) src/routes/layout.tsx dengan useCSR = True (React), atau src/routes/layout.nexy dalam mode server
bersarang layout.tsx bersarang layout.tsx / layout.vue / layout.svelte dalam mode klien, bersarang layout.nexy dalam mode server
use client komponen di halaman server pulau dalam mode server
Pengendali rute route.ts src/routes/api/x.py, ditulis dalam Python
(group) folder sama: (group)/
Tindakan Server @Action fungsi dipanggil dari formulir atau seperti fungsi klien yang diketik
next dev / next build / next start nx dev / nx build / nx start

Backendnya adalah Python, jadi API Anda berbagi kode dengan data dan pekerjaan ML Anda. Komponen klien terhidrasi sebagai pulau, bukan pohon React satu halaman penuh.

Halaman Next.js berpindah hampir seperti apa adanya, dan komponen "use client" menjadi sebuah pulau di halaman server:

src/rute/blog/[siput].tsx
import { useParams } from "@nexy/client"; export default function Post() {  const { slug } = useParams<{ slug: string }>();  return <h1>{slug}</h1>;}
src/rute/blog/[siput].nexy
---from "@/components/Comments.tsx" import Comments slug: prop[str]---<h1>{{ slug }}</h1><Comments post="{{ slug }}" directive="client:visible" />
Next.js Nexy
app/page.tsx pengontrol yang mengembalikan useViews("src/apps/home_view.nexy")
app/blog/[slug]/page.tsx @Controller("/blog/{slug}"), dengan async def get(self, slug: str)
app/layout.tsx (memiliki <html>) tampilan tata letak yang dibungkus pengontrol di sekeliling tampilannya, melalui children
use client komponen di halaman server pulau dalam tampilan
Pengendali rute route.ts pengontrol yang mengembalikan dict, ditulis dalam Python
Tindakan Server @Action fungsi dipanggil dari formulir atau seperti fungsi klien yang diketik
next dev / next build / next start nx dev / nx build / nx start

Backendnya adalah Python, sehingga API Anda berbagi kode dengan data dan pekerjaan ML Anda. Komponen klien terhidrasi sebagai pulau, bukan pohon React satu halaman penuh.

Halaman Next.js menjadi pengontrol dan tampilannya, dan komponen "use client" menjadi pulau tampilan:

src/apps/blog/post_controller.py
from nexy.decorators import Controllerfrom nexy.hooks import useViews  @Controller("/blog/{slug}")class PostController:    async def get(self, slug: str):        return useViews("src/apps/blog/post_view.nexy", context={"slug": slug})
src/apps/blog/post_view.nexy
---from "@/components/Comments.tsx" import Comments slug: prop[str]---<h1>{{ slug }}</h1><Comments post="{{ slug }}" directive="client:visible" />

Dari backend Express atau Node

Ekspres Nexy
app.get("/users/:id", handler) src/routes/users/[id].py dengan async def GET(id)
app.use(middleware) FastAPI middleware, didaftarkan dari nexyconfig.py
res.json(obj) mengembalikan dict atau model Pydantic
Tampilan EJS / Pug .nexy (Jinja2) halaman
npm run dev nx dev

app.use(...) menjadi bidang nexyconfig.py, dan res.json(...) menjadi nilai kembalian:

nexyconfig.py
from nexy.core.models import NexyConfigModel  class NexyConfig(NexyConfigModel):    useCORS = {"allow_origins": ["https://example.com"]}    useGZip = {"minimum_size": 1000}
src/rute/pengguna/[id].py
async def GET(id: int):    return {"id": id, "name": "Ada"}  # res.json({ id, name })
Ekspres Nexy
app.get("/users/:id", handler) @Controller("/users/{id}"), dengan async def get(self, id: int)
app.use(middleware) FastAPI middleware, didaftarkan dari nexyconfig.py
res.json(obj) mengembalikan dict atau model Pydantic
Tampilan EJS / Pug .nexy (Jinja2) penayangan, dikembalikan oleh useViews
npm run dev nx dev

app.use(...) menjadi bidang nexyconfig.py, dan res.json(...) menjadi nilai kembalian:

nexyconfig.py
from nexy.core.models import NexyConfigModel  class NexyConfig(NexyConfigModel):    useCORS = {"allow_origins": ["https://example.com"]}    useGZip = {"minimum_size": 1000}
src/apps/users/user_controller.py
from nexy.decorators import Controller  @Controller("/users/{id}")class UserController:    async def get(self, id: int):        return {"id": id, "name": "Ada"}  # res.json({ id, name })

Memilih router

Gunakan Kapan
Router berbasis file halaman dan titik akhir dipetakan dari file; bawaannya
Perute modular pengontrol, modul, dan injeksi ketergantungan, bergaya NestJS

Router modular dalam dua file: pengontrol, dan modul nexyconfig.py menunjuk dengan useRouter = AppModule:

src/apps/app_controller.py
from nexy.decorators import Controller  @Controller()class AppController:    async def get(self):        return {"message": "Hello"}
src/apps/app_module.py
from nexy.decorators import Modulefrom .app_controller import AppController  @Module()class AppModule:    controllers = [AppController]

Keduanya di-scaffold oleh nx new dan dicakup oleh pengujian end-to-end yang sama. Lihat Perutean dan Perutean modular.

Dimana selanjutnya

Sunting di GitHub

Enter membuka hasil, Esc menutup.