2017-06-12 2 views
0

Ich muss eine Anfrage an meinen API-Endpunkt stellen, um eine Datei hochzuladen. Ich benutze Axios in meinem Projekt, aber es sieht so aus, als wäre es ein Problem, eine Datei damit zu verbinden, während es bei Superagent einfach sein sollte. Allerdings funktioniert mein Saga-Code nicht mit Superagent (kein Antwortobjekt, API wird nicht ausgelöst) Was mache ich falsch?Redux-Saga und Superagent

import { delay } from 'redux-saga'; 
 
import { select, call, put } from 'redux-saga/effects'; 
 
import request from 'superagent' 
 
import * as action from '../../constants/actions/'; 
 
import config from '../../constants/config'; 
 
import { getFile, selectEntity, selectPreview } from '../../selectors'; 
 

 
export default function* putUserpic() { 
 
    const file = yield select(getFile) 
 
    const API = process.env.API_URL || config.API_URL; 
 

 
    const entity = yield select(selectEntity); 
 
    const requestURL = `${API}/${entity}/userpic`; 
 
    const token = localStorage.getItem(config.TOKEN); 
 

 

 

 
    var req = request.post(requestURL) 
 
    .attach(file.name, file) 
 
    .set('authorization', token); 
 

 

 
    try { 
 
     yield put({type: action.REQ_PENDING}); 
 
     const response = yield call(req.end) 
 
     yield put({type: action.RES_RECEIVED}) 
 
     yield put({type: action.MESSAGE, payload: response.data.message}); 
 

 
    } catch (e) { 
 
     yield put({type: action.RES_RECEIVED}) 
 
     yield put({type: action.AUTH_ERROR, payload: e.response.data.error}); 
 
     yield delay(config.MSG_DELAY); 
 
     yield put({type: action.RESET_ERROR}) 
 
    } finally { 
 
     yield delay(config.MSG_DELAY); 
 
     yield put({type: action.RESET_MESSAGE}) 
 
    } 
 
}

Antwort

0

Sie benötigen Sagas call -Effekt verwenden reagieren, etwas zu nennen, die ein Versprechen zurück. In Ihrem Fall werden Sie aufgefordert, die Ende-Funktion auszuführen, die mit Rückrufen verwendet werden soll, wenn Sie Versprechungen nicht verwenden möchten. Wenn Sie das Ende von Ihrem Ruflinie entfernen, sollten Sie eine Anfrage sehen, und soll eine Antwort bekommen:

const response = yield call(req) 

Hier erfahren Sie mehr darüber, wie mit dem Versprechen in Superagenten zu arbeiten: http://visionmedia.github.io/superagent/#promise-and-generator-support

Verwandte Themen