简体   繁体   中英

req.body throws an empty {}

I am using body-parser but it's not working and I don't know what the problem is.

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const bodyParser = require('body-parser');

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

var app = express();

//bodyParser
app.use(bodyParser.json());      
app.use(bodyParser.urlencoded({extended: true}));


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

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

app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

index.js

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

/* GET home page. */
router.get('/', redirection, function(req, res, next) {
    res.redirect('index', {title: 'Home'});
});

router.get('/country', function(req, res, next) {
    // CountryName

    res.render('country',
   { 
     title: 'Home',
     mainJS: 'main.js',
     //country: req.body.countries
    });

    console.log(req.body)
});

function redirection(req, res){
    if (req.url == '/'){
        res.redirect('/country');
    }
}

module.exports = router;

In this code it throws {}

What is the problem?

Your server only receives a request body in POST (or PUT or PATCH) operations, not in GET operations. You don't have router.post() in your sample code, so it seems you are not handling POSTs. Therefore, no req.body .

You can find your https://example.com/?query=parameters&query2=parameters at req.params.query and req.params.query2 .

You can't use the location bar of a browser to do a POST: they from a form posts orxhr / fetch operations.

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