Анализатор тела, приводящий к неопределенному - PullRequest
0 голосов
/ 04 апреля 2019

Попытка сделать простой console.log из тела запроса POST. Я вижу полезные данные в моей консоли Chrome с правильными данными, но при попытке прочитать их я получаю следующую ошибку:

express_1  | TypeError: Cannot read property 'exampleval' of undefined

Я использовал эту точную логику в прошлом, и у меня никогда не было проблем.

Услуги / router.js

const express = require('express');
const http = require('http');
const bodyParser = require('body-parser');
var app = express();
    // parse application/json
    app.use(bodyParser.json());                        

    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: true }));
const router = new express.Router();
const employees = require('../controllers/employees.js');


//router.route('/employees').post(employees.post);

router.post('/employees', function (req, res) {
    var exampleval = req.body.exampleval;
    console.log(exampleval);
})

module.exports = router;

услуги / веб-server.js

const http = require('http');
const express = require('express');
const webServerConfig = require('../config/web-server.js');
const bodyParser = require('body-parser');
const router = require('./router.js');
const morgan = require('morgan');
const cors = require('cors');


let httpServer;

function initialize() {
  return new Promise((resolve, reject) => {
    const app = express();
    httpServer = http.createServer(app);
    // Combines logging info from request and response
    app.use(morgan('combined'));
    // enable cors on all routes
    app.use(cors())
    // Mount the router at /api so all its routes start with /api
    app.use('/api', router);
    // Body Parser
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));

    httpServer.listen(webServerConfig.port)
      .on('listening', () => {
        console.log(`Web server listening on localhost:${webServerConfig.port}`);

        resolve();
      })
      .on('error', err => {
        reject(err);
      });
  });
}

module.exports.initialize = initialize;

function close() {
    return new Promise((resolve, reject) => {
      httpServer.close((err) => {
        if (err) {
          reject(err);
          return;
        }

        resolve();
      });
    });
  }

module.exports.close = close;

Я считаю, что это только две соответствующие части кода. Любой совет будет принят с благодарностью, так как я чувствую, что я очень близок. Я надеюсь в конечном итоге передать эти значения для использования в запросе SQL.

1 Ответ

0 голосов
/ 04 апреля 2019

Заказ промежуточного программного обеспечения имеет значение.

// Mount the router at /api so all its routes start with /api
app.use('/api', router);
// Body Parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

должно быть

// Body Parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
// Mount the router at /api so all its routes start with /api
app.use('/api', router);

, чтобы маршрутизатор получал запросы (которые он мог бы обработать) только после того, как парсер тела подключил req.body.

...