2017-11-08 5 views
0

私はReactjsを使用して、フェッチを使用して投稿要求を送信しています。また、私は通常のボディパーサーの代わりに恐ろしいものを使用しようとしています。私は奇妙な解析の問題が発生しています。私は間違って何をしていますか?JavaScriptのフェッチをFormidablejs、Expressjsで使用する

// saga simplified piece of code 
const { loginEmail, loginPwd } = request.payload; 

let postLoginSubmitOptions = { 
    method: "POST", 
    headers: { 
    'Accept': 'application/json, application/xml, text/plain, text/html, *.*', 
    'Content-Type' : 'application/x-www-form-urlencoded' 
    }, 
    body: JSON.stringify({ 
    loginEmail: loginEmail, 
    loginPwd: loginPwd 
    }) 
}; 

const response = yield call(fetch, `http://www.example.com/register`, postLoginSubmitOptions); 

// expressjs side, simplified view 

router.post('/register', function(req, res, next) { 
    console.log('registering user'); 

    var form = new formidable.IncomingForm(); 

    form.parse(req, function(err, fields, files) { 
    if(err){ 
     console.log(err); 
    } 
    console.log(`incoming fields via form parse`); 
    console.log(fields); // { '{"loginEmail":"[email protected]","loginPwd":"my-password"}': '' } 
    console.log(fields.loginEmail); // undefined 
    }); 

    } 
+0

「奇妙な解析の問題」とは何ですか? – Rob

+0

console.log(fields)行を参照してください。 –

+0

定義されていないことを除いて、他のものは何も意味しません。何が間違っているのか説明してください。 – Rob

答えて

0

パスコンテンツタイプJSON

let postLoginSubmitOptions = { 
    method: "POST", 
    headers: new Headers({'content-type': 'application/json'}), 
    body: JSON.stringify({ 
    loginEmail: loginEmail, 
    loginPwd: loginPwd 
    }) 
}; 
+0

のように見えますか?エラーはフォームが既に強力で解析されているためJSON.parseを使用して再度解析しているためです。 2番目の解決方法:エラー:不正なcontent-typeヘッダ、不明なcontent-type:text/plain; charset = UTF-8 –

+0

'console.log(fields);の出力は何ですか?コメントの1つ? –

+0

空のオブジェクト –

0

などの問題があったが、異なるデータを符号化してみましたし、それが働いていた場所を正確に私は知りません。今手ごわいとの素敵な構文解析されたオブジェクトの取得:{ loginEmail: '[email protected]', loginPwd: 'asjdfkjsadlf' }

function sendData(data) { 
    const { loginEmail, loginPwd } = request.payload; 
    const body = { loginEmail, loginPwd }; 
    var urlEncodedData = ""; 
    var urlEncodedDataPairs = []; 
    var name; 

    for(name in body) { 
    urlEncodedDataPairs.push(encodeURIComponent(name) + '=' + encodeURIComponent(body[name])); 
    } 
    urlEncodedData = urlEncodedDataPairs.join('&').replace(/%20/g, '+'); 

    var httpHeaders = { 
    'Content-Type' : 'application/x-www-form-urlencoded', 
    'Accept' : 'application/json' 
    } 

    let postOptions = { 
    method: 'post', 
    headers: new Headers(httpHeaders), 
    /*mode: 'no-cors',*/ 
    body: urlEncodedData 
    }; 

    try { 
    const response = yield call(fetch, `http://www.example.com/register`, postOptions); 
    const data = yield call([response, response.json]); 
    console.log(`data returned by fetch`); 
    console.log(data); 
    yield put({type: 'LOGIN_SUBMIT_RESPONSE', payload: data.message}) 
    } catch (e) { 
    console.log(`error fetch post object`); 
    } 
} 

をみんなありがとう!

関連する問題