mcpField
H
http-endpoints

http-endpoints

github.com/val-town开发1042 次安装5 周前更新
代码仓库

关于 http-endpoints

面向 Val Town 开发者的 HTTP val 指南,介绍如何处理传入请求,并说明端点地址、访问限制、常见实现方式和平台约束。

主要功能

  1. 01处理 HTTP 请求
  2. 02获取实时端点地址
  3. 03了解受限访问行为
  4. 04CORS 与重定向处理
  5. 05平台限制说明

适用场景

  1. 01在 Val Town 创建 HTTP API
  2. 02从 HTTP val 提供静态文件
  3. 03编辑后检查端点响应

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/val-town/plugins --skill http-endpoints

安装后在 Claude Code 中输入/http-endpoints确认已加载。

详细介绍

HTTP 端点

HTTP val(fileType: "http")会导出一个请求处理程序,并在每次收到 HTTP 请求时运行。每个 HTTP 文件都会分配一个实时 URL——切勿自行构造;请从 list_files 或 create_file 的响应中读取 links.endpoint,或调用 fetch_val_endpoint。

除非 val 的应用访问权限(httpPrivacy)设为 restricted,否则任何人都可以访问该 URL;如果设为 restricted,未通过身份验证的调用方会收到指向登录页面的 302,而不是你的响应——请参阅 restricted-access 技能。

基本处理程序

// Learn more: https://docs.val.town/vals/http/
export default async function (req: Request): Promise<Response> {
  return Response.json({ ok: true });
}

文件必须包含 export——处理程序应使用 export default。

Hono

使用 Hono 时,请导出 app.fetch(而不是 app):

import { Hono } from "npm:hono";
import { parseVal, serveImmutableFile } from "https://esm.town/v/std/utils/index.ts";

const app = new Hono();

app.get("/", (c) => c.text("hello"));

// Immutable asset caching (see the client-side-js skill): serves the
// current-version URLs your HTML shell stamps with immutableFileUrl()
app.get("/__immutable/*", (c) => serveImmutableFile(c.req.path));

// View source redirect
app.get("/source", (c) => c.redirect(parseVal().links.self.val));

// Always add this for full stack traces on errors:
app.onError((err) => Promise.reject(err));

export default app.fetch;

Hono 的 serveStatic 在 Val Town 上无法使用。静态文件请使用 std/utils 中的 serveFile / staticHTTPServer。如需查看完整的 std/utils API(readFile、serveFile、staticHTTPServer、listFiles、listFilesByPath、httpEndpoint、parseVal,……),请获取 https://utilities.val.run/docs.md。

CORS

Val Town 默认会添加宽松的 CORS 标头(Access-Control-Allow-Origin: *),因此在 99% 的情况下,你完全不需要处理 CORS。几乎总是没必要使用 Hono 的 cors 中间件。

如果你自行设置了任何 CORS 标头,Val Town 就会停止添加所有默认标头——因此,要么自行完整处理 CORS,要么完全不要处理。

重定向

Response.redirect 在 Val Town 上无法使用。请使用以下方式之一:

return new Response(null, { status: 302, headers: { Location: "/path" } });
// or, with Hono:
return c.redirect("/path");

不可用的功能

  • WebSocket:Val Town 不接受传入的 WebSocket 连接。请改用轮询、长轮询或服务器发送事件。
  • 文件系统访问:请参阅平台限制。对于持久化状态,请使用 std/sqlite 或 std/blob。

显示客户端错误

对于 HTML 响应,请添加此脚本标签,将浏览器错误发送回 val 日志(可通过 get_logs 查看):

<script src="https://esm.town/v/std/catch"></script>

验证更改

编辑 HTTP val 后,请获取该 val,以确认它返回了预期的 HTTP 响应。完成此步骤前,请勿报告更改已完成。

评论

支持 Markdown