基于node实现qq空间点赞

       由于浏览器的同源策略,我们想要调用其他网站的接口,通常会造成跨域。所以我们可以在后端服务中去请求第三方接口,这样就完美避开了浏览器的同源策略。

const http = require('http')
const https = require('https')
const url = require('url')

http.createServer((req, res) => {
    const urlobj=url.parse(req.url,true)
    res.writeHead(200, {
        "Content-Type": "application/json;charset=utf-8",
        "access-control-allow-origin": "*"
    })
    if(urlobj.pathname==='/api'){
        httppost((data)=>{
            res.end(data)
        })
    }
}).listen(3000)

function httppost(cb) {
    const options = {
        hostname: 'h5.qzone.qq.com',
        post: '443',
        path: "/proxy/domain/w.qzone.qq.com/cgi-bin/likes/internal_dolike_app?g_tk=43316339",
        method: "POST",
        headers: {
            "Content-Type": "application/x-www-form-urlencoded",
            cookie: "pgv_pvid=2309791241; eas_sid=V1n655h1y9a3A0A9I7m6U4d0J5; RK=wn10yoKBaM; ptcz=0f26e8389d307b802dd491c61a96d9464ba5d81a773f64c1fbf6f18fcbc2551f; LW_uid=l1C6Z5u3E2R8u1f2s2d1C4T820; LW_sid=r1Z625L3F2Q8H1Q4C6F0F5T5M4; pac_uid=0_016c0af7fdebe; __Q_w_s__QZN_TodoMsgCnt=1; Loading=Yes; QZ_FE_WEBP_SUPPORT=1; cpu_performance_v8=26; uin=o1095518902; skey=@pEG8ihZIF; p_uin=o1095518902; pgv_info=ssid=s7648404939; pt4_token=1MG3I9rTTSis7cWqajCb3e2xtSw9UFL*mDJMvhlDpk4_; p_skey=Z*zM7mV3cCXO8Ad*AatFlZdMwYz207qj1TXJ9WnwNGA_; rv2=8063CD6352ABCAC33A31032701F64066A2E5218458F3895809; property20=0EFF65826771967FFDFBB49CB6109013382923752D687F5051CD16BD92B52C1C653F55D5F1E130FF"
        }
    }
   var req= https.request(options, (res) => {
        let data=''
        res.on("data", chunk => {
            data+=chunk
        })
        res.on("end", () => {
            cb(data)
            console.log('ok')
        })
    })
    req.write("qzreferrer=https%3A%2F%2Fuser.qzone.qq.com%2Fproxy%2Fdomain%2Fic2.qzone.qq.com%2Fcgi-bin%2Ffeeds%2Ffeeds_html_module%3Fg_iframeUser%3D1%26i_uin%3D1120341919%26i_login_uin%3D1095518902%26mode%3D4%26previewV8%3D1%26style%3D2%26version%3D8%26needDelOpr%3Dtrue%26transparence%3Dtrue%26hideExtend%3Dfalse%26showcount%3D5%26MORE_FEEDS_CGI%3Dhttp%253A%252F%252Fic2.s21.qzone.qq.com%252Fcgi-bin%252Ffeeds%252Ffeeds_html_act_all%26refer%3D2%26paramstring%3Dos-winxp%7C100&opuin=1095518902&unikey=http%3A%2F%2Fuser.qzone.qq.com%2F1120341919%2Fmood%2F9f0fc742e0bacb5f09e90d00&curkey=http%3A%2F%2Fuser.qzone.qq.com%2F1120341919%2Fmood%2F9f0fc742e0bacb5f09e90d00&from=1&appid=311&typeid=0&abstime=1607187168&fid=9f0fc742e0bacb5f09e90d00&active=0&fupdate=1")
   
    req.end()
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现点赞功能的大致思路如下: 1. 在数据库中创建一张表,用来存储用户点赞的音乐信息。表的结构可以包含以下字段:用户ID、音乐ID、点赞时间等。 2. 在音乐列表中添加一个点赞按钮,并绑定点击事件。 3. 在点击事件中,发送请求到后端,将用户ID和音乐ID传递给后端,后端将这些信息存储到数据库中。 4. 在音乐列表中,根据用户ID和音乐ID判断该用户是否已经点赞过该音乐,如果已经点赞,则将点赞按钮设置为已选中状态。 5. 在显示音乐列表时,根据数据库中存储的点赞信息,对每个音乐的点赞数进行统计,并显示在页面上。 以下是一个简单的实现例子: 前端代码: ```html <template> <div> <div v-for="music in musicList" :key="music.id"> <h3>{{ music.name }}</h3> <p>点赞数:{{ music.likeCount }}</p> <button @click="likeMusic(music)">点赞</button> </div> </div> </template> <script> export default { data() { return { musicList: [] } }, methods: { getMusicList() { // 发送请求获取音乐列表数据 // 省略代码... }, likeMusic(music) { // 发送点赞请求 // 省略代码... music.likeCount++ music.isLiked = true } }, mounted() { this.getMusicList() } } </script> ``` 后端代码: ```javascript // 引入数据库相关模块 const mysql = require('mysql') const dbConfig = require('../config/db') // 创建数据库连接池 const pool = mysql.createPool(dbConfig) // 点赞接口 exports.likeMusic = (req, res) => { const userId = req.body.userId const musicId = req.body.musicId const likeTime = new Date() // 将点赞信息存储到数据库中 pool.query('INSERT INTO like_music (user_id, music_id, like_time) VALUES (?, ?, ?)', [userId, musicId, likeTime], (error, results) => { if (error) { console.log(error) res.status(500).send('点赞失败') } else { res.send('点赞成功') } }) } // 获取音乐列表接口 exports.getMusicList = (req, res) => { // 查询所有音乐信息 pool.query('SELECT * FROM music', (error, results) => { if (error) { console.log(error) res.status(500).send('获取音乐列表失败') } else { // 查询每首音乐的点赞数 results.forEach((music, index) => { pool.query('SELECT COUNT(*) AS like_count FROM like_music WHERE music_id = ?', [music.id], (error, results) => { if (error) { console.log(error) } else { music.likeCount = results[0].like_count music.isLiked = false } // 所有查询都完成后,返回结果给客户端 if (index === results.length - 1) { res.send(results) } }) }) } }) } ``` 需要注意的是,以上代码仅作参考,具体实现可能会有所不同,例如前端代码中的请求方式、接口地址等等。另外,为了简化示例,代码中没有包含参数校验、异常处理等部分,请在实际开发中自行添加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值