Express Ask Question の POST フォーム フィールドにアクセスする方法

Express Ask Question の POST フォーム フィールドにアクセスする方法

これが私の簡単なフォームです:

<form id="loginformA" action="userlogin" method="post">
    <div>
        <label for="email">Email: </label>
        <input type="text" id="email" name="email"></input>
    </div>
<input type="submit" value="Submit"></input>
</form>

これが私のエクスプレス/Node.js コード:

app.post('/userlogin', function(sReq, sRes){    
    var email = sReq.query.email.;   
}

sReq.query.emailまたは、sReq.query['email']などを試しましたがsReq.params['email']、どれも機能しません。すべて が返されますundefined

Get 呼び出しに変更すると動作するので、何かアイデアはありますか?

ベストアンサー1

物事はかわったExpress 4.16.0を再度起動すると、Express 3.0と同じようにexpress.json()と を使用できるようになります。express.urlencoded()

これは。。。でした違うExpress 4.0 から 4.15まで:

$ npm install --save body-parser

その後:

var bodyParser = require('body-parser')
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
  extended: true
})); 

残りはExpress 3.0と同様です。

まず、本文の投稿データを解析するためのミドルウェアを追加する必要があります。

次のコード行の 1 つまたは両方を追加します。

app.use(express.json());       // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies

次に、ハンドラーでreq.body物体:

// assuming POST: name=foo&color=red            <-- URL encoding
//
// or       POST: {"name":"foo","color":"red"}  <-- JSON encoding

app.post('/test-page', function(req, res) {
    var name = req.body.name,
        color = req.body.color;
    // ...
});

の使用に注意してくださいexpress.bodyParser()推奨されません。

app.use(express.bodyParser());

...は次と同等です:

app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());

にはセキュリティ上の懸念があるためexpress.multipart()、必要な特定のエンコードタイプのサポートを明示的に追加することをお勧めします。マルチパートエンコードが必要な場合(たとえばファイルのアップロードをサポートする場合)は、これを読む

おすすめ記事