Express路由器发布function不起作用

宣言:

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

Route.js:在这里打电话

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

req.body总是未定义的。 我能够在ajax调用中打印他们的控制台。 我不明白req.body是未定义的。 我错过了什么?

Ajax的发布数据如下所示:

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

服务器js:这里已经使用了body-parser

 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 })); 

您的请求不会通过body-parser传递,因为您在路由器之后声明它(Express按照声明的顺序传递中间件和路由请求;如果请求可以由router处理,则不会通过body-parser中间件了):

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

如果将body-parser移到前面,它应该会更好:

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

你必须使用body-parser

https://www.npmjs.com/package/body-parser

 express.use(bodyParser.json());