2016-08-28 7 views
3

JSONをfetch()を使用してPOSTメソッドでエクスプレスアプリに送り返そうとしています。ここに私のコードは次のとおりです。フェッチを使用してJSONをドキュメントの本文に挿入する - Javascript

fetch('https://development.c9users.io/canadmin',{ 
       method:'POST', 
       body:JSON.stringify({ 
        csv: results 
       }) 

ここExpressの私のポスト方法である:

app.post("/canadmin", function(req,res){ 
var data = req.body.csv; 
console.log(data); 
// r.db('cansliming').table('daily').insert(r.json(data)).run(err,); 
res.redirect("canadmin"); 
}); 

私は正しく私のデータを取得していた場合ので、私はわからないよ、私はconsole.logを通じて未定義得ます。私はここで何が欠けていますか?フェッチ - 本体が正しくありませんか?それは私の推測ですが、私は正しい構文を理解できません。

// *********** EDIT-SOLUTION ************ //

私は、Javascriptのミートアップとアレックスという名前のナイスガイに行ってきました解決策が見つかりました。私はExpressの私のreq.bodyでそれを見ることができたこれを実行した後

fetch('/saveRecords',{ 
       headers: { 
         //This is the line we need for sending this data 
         'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8' 
       }, 
       mode : 'no-cors', 
       method:'POST', 
       //This is the line we need actually send the JSON data 
       body: JSON.stringify(results) 
      }) //End fetch() 

:ヘッダは、我々はまた、モードを追加し、間違っていました!私はこれが誰かを助けることを望む。

+0

console.log(req.body) – enRaiser

+0

私はそれをして、ちょうど{{ – illcrx

+0

}を与えました。具体的な理由はありますか?要求時に 'String'で本文を変換していますか? – abdulbarik

答えて

1

通常、ストリームのようにreqから読む必要があります。このようなもの:

var body = ''; 
req.on('data', function (chunk) { 
    body += chunk; 
}); 

req.on('end', function() { 
    console.log(JSON.parse(body)); 
}); 

より良い解決策は、body-parser middlewareを使用することです。

+0

実際、bodyParser、これは私が使っているものです。 – Sombriks

+0

私は実際にbodyParserを持っていますが、私はこのために使用するとは思っていませんでした。bodyParserでどうすればいいですか? – illcrx

+0

@illcrx指示にリンクしました。 'app.use(bodyParser.json())'です。 – Brad

1

ポストメソッドにボディパーサーミドルウェアを使用する方がよいでしょう。ボディ・パーサを含む(ES6形式)

:例の擬似コードのための

import bodyParser from 'body-parser'; 
const urlEncode = bodyParser.urlencoded({extended: false}); 

、このようなAPIのポスト要求にそれを使用します。

app.post('/something_url', urlEncode, (req, res) => { ...your code here...}); 
+0

質問私はこれと同様のものを使用しています。私はこれを持っています:......... var bodyParser = require( "body-parser"); ............... ....... app.post( "/ canadmin"、bodyParser、function(req、res)){ var data = req.body; console.log(data); // r.db( 'cansliming ').table(' daily ')。insert(r.json(data)).run(err、); res.redirect( "canadmin"); }); – illcrx

-1

私も持っています同じ問題。フェッチを呼び出す。 私はそれが働いているかどうかわからないので、私は何も変更を取得していません

1

少し異なるソリューションが私のために働いた。ボディ・パーサdoes not handle multipart/form-data bodies

クライアント側fetch呼び出しが表現するためにデータを送信します。

fetch('api/users', { 
    headers: { 'Content-Type': 'application/json' }, // tells the server we have json 
    method:'PUT', // can be POST 
    body: JSON.stringify(results), // json is sent to the server as text 
}) 

サーバ側application/jsonためappリッスンを表現し、JSONに、それを解析します

const express = require('express') 
const app = express() 

// parse application/json 
app.use(bodyParser.json()) 

bodyParserを設定した後I明示ミドルウェア機能を定義しました

app.put('/api/:collection', (req, res) => { 
    logger.log('put', req.body) 
    // ... 
}) 

req.bodyはjsonです。

+0

'headers = new Headers({'Content ...:' application/json '、... other headers ...})'私はこれに問題がありました。しかし、既存のヘッダプロパティをコンストラクタに渡し、オリジナルを上書きして(APIに) – jimmont

関連する問題