Sto utilizzando un'API compatibile con JSONAPI e uno dei requisiti di formato è che tutti i dati (in entrata e in uscita) devono essere racchiusi in un oggetto data
. Quindi la mia richiesta si presenta come:
{
"data": {
"email": "[email protected]",
"password": "pass",
"type": "sessions"
}
}
E la mia risposta si presenta come:
{
"data": {
"user_id": 13,
"expires": 7200,
"token": "gpKkNpSIzxrkYbQiYxc6us0yDeqRPNRb9Lo1YRMocyXnXbcwXlyedjPZi88yft3y"
}
}
Nel mio controller, quando si effettua una nuova richiesta di sessione, ho:
$scope.signin = ->
session = new Session
email: $scope.user.email
password: $scope.user.password
session.$save()
console.log session
console.log session.token
if not session.token
alert 'Invalid Login'
else
$rootScope.session_token = session.token
$state.go 'app.dashboard'
E il mio Session
è una fabbrica che assomiglia a:
angular.module('webapp').factory 'Session', [
'$resource'
($resource) ->
$resource 'http://localhost:9500/v1/sessions',
id: '@id'
,
save:
method: 'POST'
transformRequest: (data) ->
result =
data: JSON.parse JSON.stringify data
result.data.types = 'sessions'
result = JSON.stringify result
result
transformResponse: (data) ->
result = JSON.parse data
a = JSON.parse JSON.stringify result.data
console.log a
a
La richiesta va bene. La formattazione e l'analisi sembrano funzionare. Tuttavia, la risposta, quando I log
viene visualizzata come Resource
, non Object
. E session.token
viene visualizzato come non definito anche se il server restituisce dati validi.
Come modificare il mio transformResponse
per tener conto di ciò?
Hmm? 'data: JSON.parse JSON.stringify data' perché lo stai facendo? –
Devi capire che 'session. $ Save()' è asincrono, quindi 'console.log session.token' sarà chiamato immediatamente e sarà sempre indefinito finché la richiesta' session. $ Save() 'non viene risolta. –
Ho provato ad usare anche la promessa '.then' e lo stesso risultato è avvenuto – Shamoon