jpl*_*s93 6 node.js firebase google-cloud-functions
我有一个使用YouTube API密钥的应用程序,可以在YouTube上搜索视频并将其显示在我的页面上。我刚刚了解到,将任何秘密公开给客户端都是不好的。因此,我正在考虑的解决方案是让客户端将请求发送到Firebase云功能。云功能将充当代理,我的API密钥将存储在该代理中,而不是将其存储在客户端中。
如何设置?
对于初学者,我尝试记录该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) {
Run Code Online (Sandbox Code Playgroud)
这GET是产生上述错误消息的客户端发送的请求
https://localhost:5000/jpls-youtube-viewer/us-central1/helloWorld?part=snippet&type=video&q=Linkin+Park
Run Code Online (Sandbox Code Playgroud)
这是我的应用程序的仓库:https : //github.com/jpls93/jpls-youtube-viewer
我通过将客户端请求指向我的 Firebase 数据库 URL 来解决这个问题,然后让 Firebase 数据库 URL 向 YouTube REST API URL 发出请求,并将响应解析给我的客户端。我遇到了 CORS 问题,但通过允许 access-control-origin/methods 就可以解决这个问题
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));
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2845 次 |
| 最近记录: |