angularjs 和谷歌 url 缩短
angularjs and googles url shortener
我目前遇到 google url 缩短器的问题。
我已经设置了这项服务:
angular.module('widget.core').service('urlShortener', service);
function service($log, $q, $http) {
var gapiKey = '<MyApiKey>';
var gapiUrl = 'https://www.googleapis.com/urlshortener/v1/url';
return {
shorten: shorten
};
//////////////////////////////////////////////////
function shorten(url) {
console.log(url);
var data = {
method: 'POST',
url: gapiUrl + '?key=' + gapiKey,
headers: {
'Content-Type': 'application/json',
},
data: {
longUrl: url,
}
};
return $http(data).then(function (response) {
$log.debug(response);
return response.data;
}, function (response) {
$log.debug(response);
return response.data;
});
};
};
据我所知,这应该可行。我输入了正确的 API 键,当我使用 运行 这个方法时,我得到了这个错误:
{
error: {
code: 401,
message: 'Invalid credentials'
}
}
但是,如果我使用 postman 并完全按照这种方法进行设置:
- 成功post
- 添加 content-type header 并将其设置为 application/json
- 将url设置为https://www.googleapis.com/urlshortener/v1/url?key=myapikey
将body设置为:
{
长网址:'myreallylogurl.com'
}
当我post这个时,它没有任何问题。
我已经在 google 控制台上检查了我的应用程序,它肯定设置为不受限制。
有没有人遇到过这个问题?有人知道怎么解决吗?
我明白了,这与上面的代码无关,但我想我会回答我自己的问题,因为其他人可能 运行 遇到同样的问题。
在该项目中,我设置了一个 httpInterceptor,将身份验证令牌添加到与我的 API 对话的每个请求中。这就是导致问题的原因。
碰巧我已经为我的apiUrl定义了一个常量,所以我只是更新了拦截器来检查以确保请求url 在尝试附加令牌之前是我的 api。
像这样:
angular.module('widget.core').factory('authInterceptor', factory);
function factory($q, $location, $localStorage, apiUrl) {
// The request function
var request = function (config) {
// If we are querying our API
if (config.url.indexOf(apiUrl) > -1) {
// Get our stored auth data
var authData = angular.fromJson($localStorage.get('authorizationData'));
// Set our headers to the request headers or a new object
config.headers = config.headers || {};
// If we have any auth data
if (authData && authData.authenticated) {
// Set our authorization header
config.headers.Authorization = 'Bearer ' + authData.token;
}
}
// Return our config
return config;
};
return {
request: request
};
};
希望对其他人有所帮助。花了我几个小时才弄明白:/
我目前遇到 google url 缩短器的问题。 我已经设置了这项服务:
angular.module('widget.core').service('urlShortener', service);
function service($log, $q, $http) {
var gapiKey = '<MyApiKey>';
var gapiUrl = 'https://www.googleapis.com/urlshortener/v1/url';
return {
shorten: shorten
};
//////////////////////////////////////////////////
function shorten(url) {
console.log(url);
var data = {
method: 'POST',
url: gapiUrl + '?key=' + gapiKey,
headers: {
'Content-Type': 'application/json',
},
data: {
longUrl: url,
}
};
return $http(data).then(function (response) {
$log.debug(response);
return response.data;
}, function (response) {
$log.debug(response);
return response.data;
});
};
};
据我所知,这应该可行。我输入了正确的 API 键,当我使用 运行 这个方法时,我得到了这个错误:
{
error: {
code: 401,
message: 'Invalid credentials'
}
}
但是,如果我使用 postman 并完全按照这种方法进行设置:
- 成功post
- 添加 content-type header 并将其设置为 application/json
- 将url设置为https://www.googleapis.com/urlshortener/v1/url?key=myapikey
将body设置为:
{ 长网址:'myreallylogurl.com' }
当我post这个时,它没有任何问题。 我已经在 google 控制台上检查了我的应用程序,它肯定设置为不受限制。
有没有人遇到过这个问题?有人知道怎么解决吗?
我明白了,这与上面的代码无关,但我想我会回答我自己的问题,因为其他人可能 运行 遇到同样的问题。
在该项目中,我设置了一个 httpInterceptor,将身份验证令牌添加到与我的 API 对话的每个请求中。这就是导致问题的原因。 碰巧我已经为我的apiUrl定义了一个常量,所以我只是更新了拦截器来检查以确保请求url 在尝试附加令牌之前是我的 api。 像这样:
angular.module('widget.core').factory('authInterceptor', factory);
function factory($q, $location, $localStorage, apiUrl) {
// The request function
var request = function (config) {
// If we are querying our API
if (config.url.indexOf(apiUrl) > -1) {
// Get our stored auth data
var authData = angular.fromJson($localStorage.get('authorizationData'));
// Set our headers to the request headers or a new object
config.headers = config.headers || {};
// If we have any auth data
if (authData && authData.authenticated) {
// Set our authorization header
config.headers.Authorization = 'Bearer ' + authData.token;
}
}
// Return our config
return config;
};
return {
request: request
};
};
希望对其他人有所帮助。花了我几个小时才弄明白:/