node.js req.body не определено в Express 4.16.X, body-Parser 1.X - PullRequest
0 голосов
/ 05 июня 2018

Я только начал использовать node.js для создания API RESTFul.Я сейчас пытаюсь вставить данные по почте с json в теле.

Но когда я пытаюсь получить req.body всегда не определено.Поэтому я проверяю здесь.Видел, что некоторые люди говорили, что экспресс-конфигурация должна выполняться до маршрута.

После того, как я изменил свой код.Я даже не могу получить домашнюю страницу.Может ли кто-нибудь помочь мне решить эту проблему?

express.js до

/* express.js */
import bodyParser from 'body-parser';
import express from 'express';
import cors from 'cors';
import morgan from 'morgan';
import config from './config';
import index from '../server/routes/index.route';

const app = express();

/* GET home page. */
app.get('/', (req, res) => {
  res.send(`server started on port.. http://127.0.0.1:${config.port} (${config.env})`);
});

app.use('/api', index);

// parse body params and attache them to req.body
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(cors);

// Http request logger
app.use(morgan('dev'));

export default app;

POST RESULT

{
"code": "ER_PARSE_ERROR",
"errno": 1064,
"sqlMessage": "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1",
"sqlState": "42000",
"index": 0,
"sql": "INSERT INTO Article SET ?"
}

express.js после

/* express.js */
/* ... */

const app = express();

// parse body params and attache them to req.body
app.use(bodyParser.json);
app.use(bodyParser.urlencoded({ extended: true }));

app.use(cors);

// Http request logger
app.use(morgan('dev'));

/* GET home page. */
app.get('/', (req, res) => {
  res.send(`server started on port.. http://127.0.0.1:${config.port} (${config.env})`);
});

app.use('/api', index);

export default app;

index.js

import config from './config/config';
import app from './config/express';

if (!module.parent) {
  // listen on port config.port
  app.listen(config.port, () => {
    console.log(`index.js >>> server started on port http://127.0.0.1:${config.port} (${config.env})`);
  });
}

export default app;

index.route.js

import express from 'express';
import mysql from 'mysql';
import article from './article.route';

import config from './../../config/config';

const router = express.Router();


/* GET localhost:[port]/api page. */
router.get('/', (req, res) => {
  res.send(`此路徑是: localhost:${config.port}/api`);
});

/* mysql連線測試 */
router.get('/sqlTest', (req, res) => {
  const connectionPool = mysql.createPool({
    connectionLimit: 10,
    host: config.mysqlHost,
    user: config.mysqlUserName,
    password: config.mysqlPass,
    database: config.mysqlDatabase
  });
  connectionPool.getConnection((err, connection) => {
    if (err) {
      res.send(err);
      console.log('連線失敗!');
    } else {
      res.send('連線成功!');
      console.log(connection);
    }
  });
});

// article router
router.use('/article', article);

export default router;

article.route.js

const router = express.Router();

router.route('/').post(articleCtrl.articlePost);

article.controller.js

const articlePost = (req, res) => {
  const insertValues = req.body;
  console.log('insertValues ', insertValues);
  articleModule.createArticle(insertValues).then((result) => {
    res.send(result);
  }).catch((err) => { return res.send(err); });
};

1 Ответ

0 голосов
/ 05 июня 2018

вам нужно вызвать bodyParser.json и cors как функцию;app.use(bodyParser.json());, app.cors()

...