You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SvelteKit的endpoint中获取当前服务的hostname?

解决方案

你所用的这类全栈框架(从export async function get的写法判断大概率是SvelteKit)的服务端API路由入参中,除了params还包含当前请求的URL信息,直接提取即可替换硬编码地址。

代码修改示例

// 解构入参新增url字段
export async function get({ params, url }) {
    // url.origin 就是当前服务的完整前缀:协议+域名+端口
    const baseApiPrefix = `${url.origin}/api/visits/`

    let sortedByDate = loadStays().sort((a, b) => { return b.datedebpassage - a.datedebpassage });

    await Promise.all(sortedByDate.map(async (stay) => {
        const res = await fetch(baseApiPrefix + stay.visitId);
        if (res.ok) {
            stay.visits = await res.json();
        } else {
            stay.visits = [];
        }
    }));
    return {
        body: sortedByDate,
    };
}

其他框架适配方案

如果是Express/Koa类的传统Node框架,可以从请求头拼接地址:

// Express场景示例
const baseUrl = `${req.protocol}://${req.get('host')}`

注意事项

  • 如果服务部署在Nginx、Vercel等反向代理后,需要提前配置框架的「信任代理」参数,否则获取到的host会是内部代理地址,而非对外的真实域名:
    • Express 配置:app.set('trust proxy', true)
    • SvelteKit 配置:在svelte.config.js的adapter配置中开启信任代理

额外优化建议

如果要请求的内部API和当前endpoint属于同一个服务,你完全可以直接导入对应API的处理函数直接调用,省去HTTP请求的网络开销,性能更好。


内容的提问来源于stack exchange,提问作者Guitool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:42:02