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