El middleware corre antes de tus handlers. En nyx-serve un middleware
es solo una función Request → Response con una regla:
devuelve status 0 para continuar (y
cualquier header que pongas igual llega a la respuesta final), o
cualquier otro status para frenar el request ahí mismo.
fn require_auth(req: Request) -> Response { let token: String = http_find_header(req.headers_flat, "Authorization") if token.length() == 0 { return response_json(401, "{\"error\":\"unauthorized\"}") } return Response { status: 0, headers_flat: [], body: "" } // continue }
Registralo con app_use. El orden importa — el middleware corre de arriba a abajo:
cors_configure("*", "GET, POST, OPTIONS", "Content-Type, Authorization") app_use(app, mw_cors) // built-in CORS app_use(app, require_auth) // your gate
Nota que pasas la función por nombre, no llamada:
app_use(app, mw_cors), no mw_cors(). Y el
origen CORS se configura una vez con cors_configure, no
como argumento.
Las sesiones por cookie viven en std/session,
respaldadas por nyx-kv sobre RESP. Apuntalo a tu instancia de KV una
vez, y después session_start emite la cookie y
session_set / session_get guardan valores
por usuario.
import "std/session" fn login(req: Request) -> Response { if not req.form.contains("name") { return response_json(400, "{\"error\":\"name is required\"}") } let name: String = req.form.get("name") var resp: Response = response_json(200, "{\"ok\":true}") let sid: String = session_start(req, resp) // sets the cookie session_set(req, "user", name) return resp } fn profile(req: Request) -> Response { let user: String = session_get(req, "user") if user.length() == 0 { return response_json(401, "{\"error\":\"log in first\"}") } return response_json(200, "{\"user\":\"" + user + "\"}") } fn main() { session_configure("127.0.0.1", 6380, 3600) // kv host, port, ttl let app: App = app_new() app_post(app, "/login", login) app_get(app, "/profile", profile) serve_app(app, 3000, 8) }
Necesitas un nyx-kv corriendo para esto. La forma más rápida:
$ docker run -p 6380:6380 nyxlang/nyx-kv # or point session_configure at nyxkv.com