2017-05-12 3 views
1

Deklaration:Express Router Post-Funktion funktioniert nicht

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

Route.js Post Anruf hier

router.route('/signup') 
    .post(function (req, res) { 
     console.log('post signup called', req.body); 
     res.json({message: 'signup'}); 
    }); 

module.exports = router; 

Die req.body ist immer undefiniert. Ich bin in der Lage, sie im Ajax-Call-Konsole zu drucken. Ich verstehe nicht req.body ist undefiniert. Was vermisse ich?

$.ajax({ 
    url: '/signup', 
    type: 'POST', 
    data: params, 
    success: function (res) { 
     console.log('res', res); 
    }, 
    error: function (err) { 
     console.log('err', err); 
    } 
}); 

Server js: Bereits body-parser mit hier

var express = require("express"); 
var path = require('path'); 
var app = express(); 
var mongoose = require('mongoose'); 
var request = require("request"); 
var router = require('./app/routes/route.js'); 
var functions = require('./app/functions/functions.js'); 
var http = require('http'); 
var https = require('https'); 
var bodyParser = require('body-parser'); 
var nodemailer = require('nodemailer'); 
var model = require('./app/model/model.js'); 

app.use('/', express.static(__dirname + '/public_html')); 
app.use('/', router); 
app.use(bodyParser.json({limit: '5mb'})); 
app.use(bodyParser.urlencoded({ limit: '5mb', extended: false })); 
+3

verwenden Sie müssen [body-parser] (https://github.com/expressjs/body-p) verwenden Arser) in Ihrem Express-Server. – robertklep

+0

@robertklep Ich benutze bereits Body-Parser – kittu

+0

@robertklep macht das auch – kittu

Antwort

5

Ihre Anfragen werden nicht durch body-parser weitergegeben werden, weil du es bist erklärt nach der

Daten Ajax Post verschickt Router (Express übergibt Anfragen über Middleware und Routen in der Reihenfolge der Deklaration; wenn eine Anfrage von router bearbeitet werden kann, wird sie nicht über dieweitergeleitetMiddleware mehr):

app.use('/', express.static(__dirname + '/public_html')); 
app.use('/', router); 
app.use(bodyParser.json({limit: '5mb'})); 
app.use(bodyParser.urlencoded({ limit: '5mb', extended: false })); 

Wenn Sie body-parser nach vorne bewegen, sollte es funktionieren besser:

app.use('/', express.static(__dirname + '/public_html')); 
app.use(bodyParser.json({limit: '5mb'})); 
app.use(bodyParser.urlencoded({ limit: '5mb', extended: false })); 
app.use('/', router); 
+0

Danke. Ich habe das nicht bemerkt. – kittu