2017-08-03 43 views
3

我有一个应用程序,它使用YouTube API密钥在YouTube上搜索视频并将其显示在我的页面上。我刚刚了解到,这是揭露任何秘密给客户端。因此,我正在考虑的解决方案是让客户端将请求发送到Firebase云功能。云功能将作为我的API密钥将被存储而不是将其存储在客户端中的代理。如何创建通过Firebase云端功能托管的Node.js代理服务器?

如何设置?

对于初学者,我尝试记录request对象,但我收到一个神秘的错误消息。

error: SUPERVISOR clientError { Error: Parse Error bytesParsed: 0, code: 'HPE_INVALID_METHOD' } connecting=false, _hadError=false, bytesRead=193, , fd= 
-1, reading=true, $ref=$, onread=function onread(nread, buffer) { 

这里的GET要求由生产上述

https://localhost:5000/jpls-youtube-viewer/us-central1/helloWorld?part=snippet&type=video&q=Linkin+Park 

以下错误消息客户端发送的是我的应用程序的回购:https://github.com/jpls93/jpls-youtube-viewer

而这里的托管网站:https://jpls-youtube-viewer.firebaseapp.com/

回答

0

我通过将客户端请求指向我的Firebase数据库URL来解决此问题,然后我获得了Firebase数据基URL向YouTube REST API URL请求并解析对我的客户端的响应。我有一个与CORS有关的问题,但通过允许访问控制源/方法可以简单地修复这个问题

exports.helloWorld = functions.https.onRequest((request, response) => { 
    var term = request.query.q; 
    // See https://howtofirebase.com/firebase-cloud-functions-753935e80323 
    // why we're requiring it inside the function 
    var YT_URL = "https://www.googleapis.com/youtube/v3/search"; 
    const axios = require("axios"); 
    axios 
    .get(YT_URL, { 
     params: { 
     part: "snippet", 
     type: "video", 
     key: require("./secret"), 
     q: term 
     } 
    }) 
    .then(YouTubeData => { 
     response.set("Access-Control-Allow-Origin", "*"); 
     response.set("Access-Control-Allow-Methods", "GET, POST"); 
     response.status(200).send(YouTubeData.data.items); 
    }) 
    .catch(err => console.error(err)); 
}); 
+1

你是怎么从客户端调用这个代理函数的? – reknirt

+1

现在不能任何人使用你的代理而不是自己获得一个youtube密钥? – dalore

相关问题