如何请求数据
接口代理 使用node server作为请求的中转站
数据由第三方服务接口提供的,但是由于浏览器的跨域限制,所以不能直接向第三方服务接口请求数据。
自己搭建一个node server(后端不存在跨域限制),前端页面发送请求到node server,node server再向后端发送HTTP请求数据。
在vue.config.js,启动本地的node server
devServer:{
before(app){
registerRouter(app)
}
}
router.js 运行在node.js端,提供接口路由供前端页面使用。
app.get 代理后端路由接口,后端需要什么,就提供什么。
使用get获取数据
// 注册后端路由
function registerRouter(app) {
registerRecommend(app)
}
// 注册推荐列表接口路由
function registerRecommend(app) {
app.get('/api/getRecommend', (req, res) => {
// 第三方服务接口 url
const url = 'https://u.y.qq.com/cgi-bin/musics.fcg'
// 构造请求 data 参数
const data = JSON.stringify({
comm: { ct: 24 },
recomPlaylist: {
method: 'get_hot_recommend',
param: { async: 1, cmd: 2 },
module: 'playlist.HotRecommendServer'
},
focus: { module: 'music.musicHall.MusicHallPlatform', method: 'GetFocus', param: {} }
})
// 随机数值
const randomVal = getRandomVal('recom')
// 计算签名值
const sign = getSecuritySign(data)
// 发送 get 请求
get(url, {
sign,
'-': randomVal,
data
}).then((response) => {
const data = response.data
if (data.code === ERR_OK) {
// 处理轮播图数据
const focusList = data.focus.data.shelf.v_niche[0].v_card
const sliders = []
const jumpPrefixMap = {
10002: 'https://y.qq.com/n/yqq/album/',
10014: 'https://y.qq.com/n/yqq/playlist/',
10012: 'https://y.qq.com/n/yqq/mv/v/'
}
// 最多获取 10 条数据
const len = Math.min(focusList.length, 10)
for (let i = 0; i < len; i++) {
const item = focusList[i]
const sliderItem = {}
// 单个轮播图数据包括 id、pic、link 等字段
sliderItem.id = item.id
sliderItem.pic = item.cover
if (jumpPrefixMap[item.jumptype]) {
sliderItem.link = jumpPrefixMap[item.jumptype] + (item.subid || item.id) + '.html'
} else if (item.jumptype === 3001) {
sliderItem.link = item.id
}
sliders.push(sliderItem)
}

浙公网安备 33010602011771号