简体   繁体   中英

express.js req.body is always empty

I'm learning node.js and express.js, and when I post something I have an empty body.

What I do is trying to get input from a registration form. My app.js is (the relevant part):

var express = require('express');
var path = require('path');
var expressValidator = require('express-validator');
var cookieParser = require('cookie-parser');

var session = require('express-session');
var bodyParser = require('body-parser');
var multer = require('multer');


var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var upload = multer({ dest: 'uploads/' });

app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());


// Handle Express session
app.use(session({
  secret:'secret',
  saveUnintialized: true,
  resave: true
}));

users.js is:

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

// Add model for user.
// Note that variable has first uppercase, and model name is singular.
var User = require('../models/user');

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

router.get('/register', function(req, res, next) {
  res.render('register', {
    'title': 'Register'
  });
});

router.get('/login', function(req, res, next) {
  res.render('login', {
    'title': 'Login'
  });
});

router.post('/register', function(req, res, next) {
  // These values come from the form.control name in register.jade
  console.log('Register clicked...');
  console.log('Body: ', req.body);

});

module.exports = router;

and register.jade is:

extends layout

block content
  h1 Register
  p Please register using the form below
  ul.errors
        if errors
                each error, i in errors
                    li.alert.alert-danger #{error.msg}
  form(method='post', action='/users/register', enctype='multipart/form-data')
      .form-group
          label Name
          input.form-control(name='name', type='text', placeholder='Enter Name')
      .form-group
          label Email
          input.form-control(name='email', type='text', placeholder='Enter Email')
      .form-group
          label Username
          input.form-control(name='username', type='text', placeholder='Enter Username')
      .form-group
          label Password
          input.form-control(name='password', type='password', placeholder='Enter password')
      .form-group
          label Confirm Password
          input.form-control(name='password2', type='password', placeholder='Confirm password')
      .form-group
          label Profile Image
          input.form-control(name='profileimage', type='file')
      input.btn.btn-default(name='submit', type='submit', value='Register')

What's wrong????? I'm getting crazy :-(

Thanks

There should be app.use('/users', users); somewhere in your app.js, make sure this is after your app.use(bodyParser block since body parsers will populate req.body .

You should also remove enctype='multipart/form-data' if you don't need file uploads or use the multipart parser in users.js:

var multer = require('multer');
var upload = multer({ dest: 'uploads/' });
router.post('/register', upload, function(req, res) {

You can try in app.js:

var routes = require('./routes')
app.use(routes)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM