Express路由器发布功能不起作用

kit*_*ttu 2 javascript node.js express

宣言:

var express = require('express');
var router = express.Router();
Run Code Online (Sandbox Code Playgroud)

Route.js:在这里发布电话

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

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

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);
    }
});
Run Code Online (Sandbox Code Playgroud)

server 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 }));
Run Code Online (Sandbox Code Playgroud)

rob*_*lep 5

您的请求将不会被传递,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 }));
Run Code Online (Sandbox Code Playgroud)

如果你移到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);
Run Code Online (Sandbox Code Playgroud)