2016-12-28 14 views
-1

ユーザーデータを取得するための入力フィールドと選択フィールドがあるフォームがあります。そして、送信ボタンのハンドラを介してajax呼び出しを送信して、ユーザーデータをサーバーに保持したいと考えています。ここで`req.body`を使用してexpress.jsでフォームデータを取得することができません

がコードのスケルトンで、

クライアント側:

xhr.open("POST", "/upload", true) 
xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
    if (xhr.status === 200) { 
     log('ajax succeed') 
    } else { 
     log('ajax failed') 
    } 
    } 
} 
console.log(data) // the data is not empty 
xhr.send(data) 

サーバー側:

import express from 'express' 
import bodyParser from 'body-parser' 

var app = express() 
app.use(bodyParser.json()) 
app.use(bodyParser.urlencoded({ extended: true })) 

app.post('/upload', (req, res) => { 
    console.log(req.body) // get "{}" 
    res.send('greetings from Express!') 
}) 

AJAX呼び出しは、サーバーのエンドポイントに到達し、適切にメッセージを送ることができますクライアントに返信しますが、なぜフォームデータをreq.bodyから取得できないのですか?

+0

任意のヒント? – Phil

+0

@Philデータの形は '{username、uploaded_file、selected_options}' – Xlee

+0

のように 'data'は実際のJavaScriptオブジェクトですか?あなたは 'application/x-www-form-urlencoded'(あなたが現在やっていること)やJSONとして送信したいですか? – Phil

答えて

2

サーバーが予期していると言っているコンテンツタイプの正しい本文​​形式を送信していないように見えるため、データを解析できません。

は試してみてください。この(クライアント側) `data`がどのように見えるかの

xhr.setRequestHeader('Content-type', 'application/json') 
xhr.send(JSON.stringify(data)) 
+0

ありがとう:) – Xlee

関連する問題