Sapper中如何正确获取服务端渲染时的请求头信息?

司马俊宇 阅读 24

我在用Sapper做SSR开发时,想在服务端获取用户请求的User-Agent,但在preload函数里拿不到req对象,试了global.window也无效,到底该怎么拿到请求头啊?

我现在的代码是这样的:

export async function preload(page, session) {
  // 这里怎么拿到 req.headers['user-agent']?
  const userAgent = ???;
  return { userAgent };
}
我来解答 赞 3 收藏
二维码
手机扫码查看
2 条解答
司马志鲜
在Sapper中,要在服务端渲染时获取请求头信息,你需要通过page对象来访问req。你当前的preload函数可以直接从page对象中解构出req,然后从中获取headers。可以优化成这样:

export async function preload(page, session) {
const { req } = page;
const userAgent = req ? req.headers['user-agent'] : '';
return { userAgent };
}


这样就能在服务端渲染时正确获取到User-Agent了。注意,这里加了个判断req ?是为了防止在客户端执行时出现错误,因为在客户端preload函数不会接收到req对象。
点赞
2026-03-23 12:09
IT人翼杨
在Sapper中,要在服务端获取请求头信息,你需要通过preload函数的参数来访问。你提到的代码里,page对象包含了请求的相关信息。一般这样处理:

export async function preload(page, session) {
const userAgent = page.req ? page.req.headers['user-agent'] : undefined;
return { userAgent };
}


这里的page.req就是你在服务端渲染时可以访问到的request对象,通过它你可以拿到请求头里的各种信息,比如User-Agent。注意,这个page.req只在服务端存在,在客户端它是undefined的,所以记得加个判断。
点赞
2026-03-23 09:03