vue-vite + qqmusicapi 开发一个简单的搜索歌曲的在线网址 - 1

140 阅读2分钟

1 github安装qqmusicapi

1.1 项目目录结构是这样的

image.png

1.2 npm install npm start 以后出现这样的结果就是运行成功

image.png

2 npm create vite@latest 创建我的一个vue项目

image.png

3 运行看看

  • cd vue_part
  • npm install
  • npm run dev

image.png

4 创建src/api/axios.js 写一个简单的看看先

import axios from 'axios'  
  
const request = axios.create({  
baseURL: import.meta.env.VITE_API_BASE_URL,  
timeout: 1000000  
})  
// axios 请求拦截器  
request.interceptors.request.use(  
(config)=>{  
return config;  
},  
(e)=>{  
return Promise.reject(e);  
}  
);  
// axios 响应拦截器  
request.interceptors.response.use(  
(res)=>{  
return res.data;  
},  
(e)=>{  
return Promise.reject(e);  
}  
);  
export default request;

5 创建一个search.vue 试试能不能请求成功

  • 5.1 sraech.vue
<template>  
<div class="search-container" style="background: #f9f9f9">  
<input type="text" v-model="searchQuery" placeholder="搜索歌曲" />  
<button @click="performSearch">搜索</button>  
<div v-if="searchResults">  
<h3>搜索结果</h3>  
<ul>  
<li v-for="song in searchResults" :key="song.id">  
{{ song.name }} - {{ song.artist }}  
</li>  
</ul>  
</div>  
</div>  
</template>  
  
<script setup>  
import { ref, onMounted } from 'vue';  
import request from '../api/axios.js'; // 确保路径正确  
  
const searchQuery = ref('');  
const searchResults = ref(null);  
  
const performSearch = async () => {  
const response = await request.get('/search', {  
params: {  
query: searchQuery.value  
}  
});  
searchResults.value = response.data;  
//输出看看  
console.log(searchResults.value);  
};  
  
</script>  
  
<style scoped>  
.search-container {  
display: flex;  
flex-direction: column;  
align-items: center;  
  
}  
  
  
</style>
  • 5.2 App.vue
<script setup>  
import { ref, onMounted } from 'vue';  
import Search from "./views/Search.vue";  
</script>  
  
<template>  
<Search />  
</template>  
  
<style scoped>  
  
</style>
  • 5.3 yarn run dev
  • 输入点搜索试试看

image.png

  • 出现错误'

image.png

  • 5.4 解决办法:cors中间键
  • cd .. 返回qqmusicapi目录
  • npm install cors
  • 在app.js文件里面添加: const cors = require('cors');app.use(cors()); 问题就解决了

6 传参错误?

const performSearch = async () => {  
// let params = new FormData();  
// params.append('key', searchQuery.value);  
const response = await request.get('/search', {  
params:{  
key: searchQuery.value  
}  
});  
searchResults.value = response.data;  
//输出看看  
console.log(searchResults.value);  
};
  • 6.5 查看效果:但是对比文档的话不知道pageNo有啥作用好像1 和 2 没区别啊
  • 嗷嗷嗷我懂了是指第几页的数据,对比qq音乐搜索就可以发现了
  • 6.6 额不下

image.png image.png

  • 6.6 算是运行起来了,那接下来开始封装api,然后对比文档写好一个搜索页面
  • 6.7 明确需求,我是只打算做一个页面的,用来指定一个用户,先获得该用户的歌单,然后在该用户的歌单里面根据歌词搜索想听的歌是哪首,后续其他内容再说吧!
  • 6.8 额封装好像多事了,但是为了美观还是封装一下?

7 翻阅文档

  • 7.1 修改以后
let params = {'key': searchQuery.value, pageNo: 3, pageSize: 30};  
console.log(params);  
// const response = await request.get('/search', {  
// params:{  
// key: searchQuery.value,  
// pageNo: 3,  
// pageSize: 30  
// }  
// });  
const response =await Search(params);  
searchResults.value = response.data;  
//输出看看  
console.log(searchResults.value);  
};
  • 7.2 感觉蛮冗余的,新建的api/search.js 用来放我的搜索界面的api
import request from "../api/axios";  
  
export const Search = (data) => {  
return request.get("/search", {  
params:{  
key:data.key,  
pageNo:data.pageNo,  
pageSize: data.pagesize  
},  
});  
};
  • 7.3 试试先能不能返回大量的歌单 image.png
  • 7.4 看了看qq音乐的页面里面都是可以直接搜索用户的,但是登录以后才能看见
  • 7.5 所以登录貌似是必须做的