Angular Universal SSR渲染时修改User-Agent的方法
修改SSR模式下API请求的User-Agent
根据你使用的请求工具,有几种不同的配置方式:
1. Node.js原生http/https模块
如果直接用原生模块发起API请求,在请求选项的headers里指定自定义User-Agent即可:
const https = require('https'); const express = require('express'); const app = express(); app.get('/ssr-page', (req, res) => { const apiReqOpts = { hostname: 'api.example.com', path: '/target-endpoint', method: 'GET', headers: { 'User-Agent': '你的自定义User-Agent内容' // 替换为需要的UA字符串 } }; const apiReq = https.request(apiReqOpts, (apiRes) => { let rawData = ''; apiRes.on('data', (chunk) => { rawData += chunk; }); apiRes.on('end', () => { const responseData = JSON.parse(rawData); res.render('your-page-template', { data: responseData }); }); }); apiReq.on('error', (err) => { res.status(500).send(`API请求失败: ${err.message}`); }); apiReq.end(); });
2. 使用axios请求库
全局配置(所有请求自动携带UA)
在项目初始化时设置全局默认headers,后续所有axios请求都会沿用这个配置:
const axios = require('axios'); const express = require('express'); const app = express(); // 全局配置自定义User-Agent axios.defaults.headers.common['User-Agent'] = '你的自定义User-Agent内容'; app.get('/ssr-page', async (req, res) => { try { const apiRes = await axios.get('https://api.example.com/target-endpoint'); res.render('your-page-template', { data: apiRes.data }); } catch (err) { res.status(500).send(`API请求失败: ${err.message}`); } });
单次请求配置(仅当前请求生效)
如果只需要特定请求携带自定义UA,在请求参数里单独设置headers:
app.get('/ssr-page', async (req, res) => { try { const apiRes = await axios.get('https://api.example.com/target-endpoint', { headers: { 'User-Agent': '你的自定义User-Agent内容' } }); res.render('your-page-template', { data: apiRes.data }); } catch (err) { res.status(500).send(`API请求失败: ${err.message}`); } });
3. 使用Node.js Fetch API(v18+内置)
如果用原生Fetch发起请求,在请求选项的headers中指定UA:
const express = require('express'); const app = express(); app.get('/ssr-page', async (req, res) => { try { const apiRes = await fetch('https://api.example.com/target-endpoint', { headers: { 'User-Agent': '你的自定义User-Agent内容' } }); const responseData = await apiRes.json(); res.render('your-page-template', { data: responseData }); } catch (err) { res.status(500).send(`API请求失败: ${err.message}`); } });
内容的提问来源于stack exchange,提问作者Венелин Илиев
相关产品推荐
相关产品推荐

