req.body undefined ... как я могу решить - PullRequest
0 голосов
/ 28 февраля 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();

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, а затем выберите вкладку form-data и введите имя ключа данных формы, которые вы пытаетесь отправить, чтобы ваш API мог распознать это, а затем значение. Нажмите «Отправить», и вы получите ответ с кодом состояния 200. Если вы получили сообщение об ошибке, в котором говорится, что req.body не определено, то у вас та же проблема, что и у меня.

Ответы [ 2 ]

0 голосов
/ 28 февраля 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}`));
0 голосов
/ 28 февраля 2020
  1. Вы используете bodyparser.json(). Из документации это проанализирует запросы, которые только в JSON. Вам лучше использовать bodyParser.urlencoded([options]).

  2. Я советую использовать express.urlencoded вместо.

Читать это для уточнение

...