我如何将 ngResource 中的默认参数设置为 POST
How can i set default param in ngResource to be POST
我有一个简单的 AJAX 请求,每次调用都需要一个 csrf 令牌,我这样定义它:
app.factory('auth', ['$resource', '$cookies', function($resource, $cookies){
var getCsrf = function() {
//get csrf token from cookie
};
return {
login: $resource('auth/login', {}, {
'q' : {
method: 'POST',
params: {csrf_token: getCsrf()}
}
}),
// ... some more requests
};
}]);
据我了解,您可以将默认 url
参数指定为 $resource()
调用的第二个参数,在我的示例中为空对象 {}
。显然,我在 params: ...
下的配置对象中设置的数据也通过 GET 发送,而不是使用指定的 POST-method.
一种方法是手动将 csrf_token 放在我调用 api 函数的位置,但我想保持它干净。有没有办法告诉 angular 默认参数使用什么方法?所以我可以简单地使用 ..
auth.login.q(email, password, ...).then( ... );
.. 无需在我的所有调用中实现 csrf-getter 函数。另外我对 AngularJS 比较陌生,所以一个简单的答案就太好了!
在 angular 中有一个简单的方法:
在配置模块中设置 xsrf cookie 名称和 header 名称默认值。
app.config(['$httpProvider', function($httpProvider) {
// response cookie name
$httpProvider.defaults.xsrfCookieName = 'csrf_cookie';
// request header name where the value of the cookie get set
$httpProvider.defaults.xsrfHeaderName = 'HTTP_X_XSRF_TOKEN';
// to set ajax request header
$httpProvider.defaults.headers.common = { 'X-Requested-With' : 'XMLHttpRequest'};
}
我有一个简单的 AJAX 请求,每次调用都需要一个 csrf 令牌,我这样定义它:
app.factory('auth', ['$resource', '$cookies', function($resource, $cookies){
var getCsrf = function() {
//get csrf token from cookie
};
return {
login: $resource('auth/login', {}, {
'q' : {
method: 'POST',
params: {csrf_token: getCsrf()}
}
}),
// ... some more requests
};
}]);
据我了解,您可以将默认 url
参数指定为 $resource()
调用的第二个参数,在我的示例中为空对象 {}
。显然,我在 params: ...
下的配置对象中设置的数据也通过 GET 发送,而不是使用指定的 POST-method.
一种方法是手动将 csrf_token 放在我调用 api 函数的位置,但我想保持它干净。有没有办法告诉 angular 默认参数使用什么方法?所以我可以简单地使用 ..
auth.login.q(email, password, ...).then( ... );
.. 无需在我的所有调用中实现 csrf-getter 函数。另外我对 AngularJS 比较陌生,所以一个简单的答案就太好了!
在 angular 中有一个简单的方法: 在配置模块中设置 xsrf cookie 名称和 header 名称默认值。
app.config(['$httpProvider', function($httpProvider) {
// response cookie name
$httpProvider.defaults.xsrfCookieName = 'csrf_cookie';
// request header name where the value of the cookie get set
$httpProvider.defaults.xsrfHeaderName = 'HTTP_X_XSRF_TOKEN';
// to set ajax request header
$httpProvider.defaults.headers.common = { 'X-Requested-With' : 'XMLHttpRequest'};
}