req.body undefinedКак я могу решить

[  server.js  ]

const fs = require("fs");
const express = require("express");
const bodyParser = require("body-parser");
const mysql = require("mysql");
const app = express();
const port = process.env.PORT || 5000;

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

const data = fs.readFileSync("./database.json");
const conf = JSON.parse(data);

const connection = mysql.createConnection({
    host: conf.host,
    user: conf.user,
    password: conf.password,
    port: conf.port,
    database: conf.database
});

connection.connect();

app.get("/api/users", (req, res) => {
    connection.query(
        "select * from users where isDeleted = 0",
        (err, rows, fields) => {
            res.send(rows);
            // console.log(err);
            // console.log(rows);
        }
    );
});


app.post("/api/users", (req, res) => {
    let sql = "insert into users values (null,?,?,now(),now(),0)";
    let name = req.body.name;
    let dsc = req.body.dsc;
    let params = [name, dsc];
    console.log(params);
    connection.query(sql, params,
        (err, rows, fields) => {
            res.send(rows);
            // console.log(err);
            // console.log(rows);
        });
});

app.delete("/api/users/:id", (req, res) => {
    let sql = "update users set isDeleted = 1 where id = ?";
    let params =[req.params.id];
    connection.query(sql,params,
        (err, rows, fields)=>{
            res.send(rows);
            // console.log(err);
            // console.log(rows);
        });
});

app.listen(port, () => console.log(`Listening on port http://localhost:${port}`));

Опишите ошибку

Я пытаюсь отправить данные формы в свой API, но req.body по какой-то причине не определен.

Воспроизвести

Шаги для воспроизведения поведения:

создайте новый запрос, введите URL-адрес конечной точки API, выберите вкладку body, а затем выберите вкладку данных формы, введите имя ключа данных формы, которые вы пытаетесь отправить, чтобы ваш API мог распознать его, а затем значение. Нажмите «Отправить», и вы должны получить ответ с кодом состояния 200. Если вы получите сообщение об ошибке, подобное тому, что я сообщаю мне, что req.body не определено, то у вас та же проблема, что и у меня.


person Dan Park    schedule 28.02.2020    source источник


Ответы (2)


  1. Вы используете bodyparser.json(). Судя по документации, это будет анализировать запросы, которые только в формате JSON. Вам лучше использовать bodyParser.urlencoded([options]).

  2. Вместо этого я советую использовать express.urlencoded.

Прочтите это для уточнения

person cr05s19xx    schedule 28.02.2020

вам не хватает роутера

[  server.js  ]

const fs = require("fs");
const express = require("express");
const bodyParser = require("body-parser");
const mysql = require("mysql");
const app = express();
const port = process.env.PORT || 5000;

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

const data = fs.readFileSync("./database.json");
const conf = JSON.parse(data);

const connection = mysql.createConnection({
    host: conf.host,
    user: conf.user,
    password: conf.password,
    port: conf.port,
    database: conf.database
});

connection.connect();

// u need a router
const router = express.Router();

router.get("/api/users", (req, res) => {
    connection.query(
        "select * from users where isDeleted = 0",
        (err, rows, fields) => {
            res.send(rows);
            // console.log(err);
            // console.log(rows);
        }
    );
});


router.post("/api/users", (req, res) => {
    let sql = "insert into users values (null,?,?,now(),now(),0)";
    let name = req.body.name;
    let dsc = req.body.dsc;
    let params = [name, dsc];
    console.log(params);
    connection.query(sql, params,
        (err, rows, fields) => {
            res.send(rows);
            // console.log(err);
            // console.log(rows);
        });
});

router.delete("/api/users/:id", (req, res) => {
    let sql = "update users set isDeleted = 1 where id = ?";
    let params =[req.params.id];
    connection.query(sql,params,
        (err, rows, fields)=>{
            res.send(rows);
            // console.log(err);
            // console.log(rows);
        });
});

app.use(router);

app.listen(port, () => console.log(`Listening on port http://localhost:${port}`));
person Ernesto    schedule 28.02.2020
comment
ох!!!! Вижу проблему, посмотри, может у тебя почтальон отправляет тело в "Content-Type": "application/x-www-form-urlencoded". Проблема не в задке, а в переде, надо натягивать кузов js const data = { username: 'example' }; fetch('https://example.com/profile', { method: 'POST', // or 'PUT' headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), }) .then((response) => response.json()) .then((data) => { console.log('Success:', data); }) .catch((error) => { console.error('Error:', error); });) - person Ernesto; 28.02.2020
comment
взгляните на обнадеживающий пример дара - person Ernesto; 28.02.2020