Express: пустое требование - PullRequest
0 голосов
/ 07 февраля 2020

у меня просто express сервер:

const express = require('express');
const exphbs = require('express-handlebars');
const path = require('path');
const bodyparser = require('body-parser');

const app = express();
const hbs = exphbs.create({
    defaultLayout: 'main',
    extname: 'hbs'
});

const _PORT = process.env.PORT || 80;

app.engine('hbs', hbs.engine);
app.set('view engine', 'hbs');
app.set('views', 'views');
app.use(bodyparser.urlencoded({ extended: false }));
app.use(bodyparser.json({ type: 'application/*+json' }));
app.use(express.static(path.join(__dirname, 'public')));

app.use(require('./routers/login'));

serverStart();

async function serverStart(){
    try{
        app.listen(_PORT);
        console.log('[SERVER] Server is listening port ' + _PORT + ' now.');
    }catch(error){ 
        console.log(error);
    }
}

И просто роутер:

const { Router } = require('express');

const router = Router();

router.get('/', async (req, res) => {
    res.render('login', {
        title: 'main page'
    });
});

router.post('/', async (req, res) => {
    console.log(req.body);
});

module.exports = router;

Почему req.body всегда пусто? Я пытался отправить запрос POST от "Почтальон", но это не работает. Он работает только с запросом x- www-form-urlencoded, но я хочу отправить запрос json.

PS Извините за мой engli sh.

UPD: скриншот почтальона ссылка

1 Ответ

0 голосов
/ 08 февраля 2020

Я пробовал ваш код, и он работает нормально, вам нужно только изменить код:

app.use(bodyparser.json({ type: 'application/*+json' }));

С этим кодом ниже:

app.use(bodyparser.json({ type: 'application/json' }));

Примечание: Если вы используете последнюю версию express, вам не следует устанавливать body-parser, поскольку body-parser уже включен.

Итак, вы можете использовать этот код ниже:

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

Я надеюсь, что это может помочь вам.

...