Узел - req.body имеет значения, но возвращает неопределенное - PullRequest
0 голосов
/ 04 июля 2019

Таким образом, в Node / Express я могу увидеть значение тела, используя body-parser, и console.log (req) возвращает JSON со значением тела:

 body: { email: [Object], cname: '', pass1: '', pass2: '' },

Но req.body всегда возвращает undefined. Я знаю, что позиционирование важно, и я видел множество потоков, но у меня есть маршруты в отдельных файлах, поэтому я думаю, что это вызывает некоторые проблемы.

Вот код app.js:

//(1) Server Config
const express = require('express')
const app = express()
const port = 3000
app.set('view engine', 'pug')
const path = require('path')
app.use('/', express.static(path.join(__dirname, '/')))

//(2) Modules
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))

//(3) Routes
app.use(require('./routes/account_create'))
app.use(require('./routes/account_register'))

//(4) Server Start
app.listen(port, () => console.log(`Listening on ${port}`))
mongoose.connect(`mongodb://${db_server}/${db_name}`)
    .then(() => console.log('Connected to DB'))
    .catch(err => console.log(err))

Форма заполняется по маршруту account_create, затем POST находится в account_register.

Вот учетная запись_регистра:

const express = require('express')
const router = express.Router()

router.post('/account_register', (res, req) => {
    console.log(req.body) //returns undefined
})

module.exports = router

На тот случай, если это необходимо, вот код для маршрута account_create и PUG:

const express = require('express')
const router = express.Router()

router.get('/account_create', (req, res) => {
    res.render('account_create')
})

module.exports = router

html
    head
        h1 Create Account
        form(action='/account_register' method='POST')
            .form-group
                label(for='email') E-Mail
                input#email(type='email', name='email')
            .form-group
                label(for='cname') Character Name
                input#cname(type='text', name='cname')
            .form-group
                label(for='pass1') Password
                input#pass1(type='password', name='pass1')
                label(for='pass2') Password Confirmation
                input#pass2(type='password', name='pass2')
            button.btn(type='submit') Register
        script(src='../scripts/account_create.js')

1 Ответ

2 голосов
/ 04 июля 2019

Вы можете заменить файл account_register следующим образом:

const express = require('express')
const router = express.Router()

router.post('/account_register', (req, res) => {
    console.log(req.body) //returns form body data
})

module.exports = router

Проблема возникла из-за неправильного положения req и res в функции.

...