2017-06-03 3 views
1

Expressアプリケーションから別のファイルにルーティングを移動しようとしましたが、動作しますが、投稿リクエストの本文を取得しようとすると定義されません。ここでNode.jsを使用してリクエストコンテンツを投稿する

はserver.jsファイルです:

var winston = require('winston'); 
winston.remove(winston.transports.Console); 
winston.add(winston.transports.Console, {colorize: true}); 
winston.add(winston.transports.File, { filename: 'server.err', level: 'error'}); 
winston.info('Starting server.'); 

var Firebase = require('firebase-admin'); 
var connection = require('./connection/firebaseConnection.json'); 

var express = require('express') 
app = express(); 
var router = require('./srcs/router'); 
var bodyParser = require('body-parser'); 

try { 
    Firebase.initializeApp({ 
    credential: Firebase.credential.cert({ 
     projectId: connection.firebase.project_id, 
     clientEmail: connection.firebase.client_email, 
     privateKey: connection.firebase.private_key 
    }), 
    databaseURL: 'https://' + connection.firebase.project_id + '.firebaseio.com' 
    }); 
    winston.info('Connected to Firebase.'); 
} catch (error) { 
    winston.error('Could not connect to Firebase : ' + error.code + ' : ' + error.message); 
    process.exit(1); 
} 

app.use('/', router); 

app.use(bodyParser.json({limit: '50mb'})); 
app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); 

app.use(function(req, res, next) { 
    var origin = req.headers.origin; 
    res.setHeader('Access-Control-Allow-Origin', '*'); 
    res.setHeader('Access-Control-Allow-Methods', 'POST', 'GET'); 
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type,X-Requested-With'); 
    res.setHeader('Access-Control-Allow-Credentials', true); 
    return next(); 
}); 

var server = app.listen(80, function() { 
    winston.info('Server listening on port 80.'); 
}); 

そして、ここではrouter.js

var express = require('express'); 
var router = express.Router(); 

var winston = require('winston'); 

router.post('/post', function(req, res) { 
    console.log(req.body); 
}); 

module.exports = router; 

である私は、このコマンドを使用して、その上にカールをした:

curl --data "title=test" http://localhost/post 

router.postがトリガされますが、値は未定義です。

+2

ルータミドルウェアコールの前にbodyParserミドルウェア( 'app.use'コール)を追加してみてください。 – Cristy

+0

それは働いて、ありがとう! – TakahT

+0

回答を追加しました。 – Cristy

答えて

1

ルータミドルウェアコールの前にbodyParserミドルウェア(app.useコール)を追加してみてください。

ミドルウェアは、追加された順に実行されます。ルータに到達する前にbodyParserを実行します。

app.use(bodyParser.json({limit: '50mb'})); 
app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); 

app.use('/', router); 
関連する問題