不幸的是,您必须在后端代理请求以保密。(我假设您需要一些通过未经身份验证的请求无法获得的用户数据,例如https://api.github.com/users/rsp?callback=foo因为否则您首先不需要使用 API 密钥- 但你没有具体说明你需要做什么,所以这只是我的猜测)。
你可以做的是这样的事情:在你的后端,你可以为你的前端添加一个新的路由来获取信息。它可以做任何您需要的事情 - 使用或不使用任何 API 密钥、验证请求、在返回客户端之前处理响应等。
例子:
var app = require('express')();
app.get('/github-user/:user', function (req, res) {
getUser(req.params.user, function (err, data) {
if (err) res.json({error: "Some error"});
else res.json(data);
});
});
function getUser(user, callback) {
// a stub function that should do something more
if (!user) callback("Error");
else callback(null, {user:user, name:"The user "+user});
}
app.listen(3000, function () {
console.log('Listening on port 3000');
});
在此示例中,您可以在以下位置获取用户信息:
该函数getUser
应该向 GitHub 发出实际请求,在您调用它之前,您可以更改是否确实是您的前端发出请求,例如通过检查“Referer”标头或其他内容,验证输入等。
现在,如果您只需要公共信息,那么您可以使用像这样的公共 JSON-P API - 使用 jQuery 的示例使事情变得简单:
var user = prompt("User name:");
var req = $.getJSON('https://api.github.com/users/'+user);
req.then(function (data) {
console.log(data);
});
见演示