Node.js (express & bodyParser を使用): post リクエストからフォームデータを取得できません 質問する

Node.js (express & bodyParser を使用): post リクエストからフォームデータを取得できません 質問する

Node.js サーバーに送信された投稿リクエストのフォームデータを回復できないようです。以下にサーバー コードと投稿リクエスト (Chrome の Postman を使用して送信) を示します。

投稿リクエスト

POST /api/login HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="userName"

jem
----WebKitFormBoundaryE19zNvXGzXaLvS5C

NodeJS サーバーコード

var express    = require('express');        // call express
var app        = express();                 // define our app using express
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser());

app.all('/*', function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Content-Type,accept,access_token,X-Requested-With');
    next();
});

var port = process.env.PORT || 8080;        // set our port

var router = express.Router();              // get an instance of the express Router

router.get('/', function(req, res) {

    res.json({ message: 'I am groot!' });   
});

// Login
router.route('/login')

    .post(function(req, res){

        console.log('Auth request recieved');

        // Get the user name
        var user = req.body.userName;

        var aToken = getToken(user);

        res.json({

            'token':'a_token'
        });
    });

app.use('/api', router);

app.listen(port);

login メソッドは を取得しようとしますreq.body.userNameが、req.bodyは常に空です。SO でこのような動作を説明する他のケースを見たことがありますが、関連する回答はどれもここでは当てはまりませんでした。

助けてくれてありがとう。

ベストアンサー1

一般的に、エクスプレスアプリでは適切なボディパーサーミドルウェアreq.body体を収容するため。

[編集済み]

  1. JSON だけでなく、URL エンコードされた (マルチパートではない) フォーム データの解析が必要な場合は、以下を追加してみてください。

    // Put this statement near the top of your module
    var bodyParser = require('body-parser');
    
    
    // Put these statements before you define any routes.
    app.use(bodyParser.urlencoded());
    app.use(bodyParser.json());
    

    まず、追加する必要があるのはボディパーサーdependenciesあなたの のプロパティに移動しpackage.json、 を実行しますnpm update

  2. 複数パートのフォームデータを処理するには、bodyParser.urlencoded()ボディパーサーは機能しません。推奨モジュールはこちらマルチパートボディを解析します。

おすすめ記事