POST-запрос не приходит (MERN) - PullRequest
1 голос
/ 13 февраля 2020

Я впервые использую стек MERN для создания приложения.

Для регистрации HTTP-запросов я использую «morgan».

Мне удалось отправить данные на mongodb, который, кажется, работает нормально. Проблема в том, что мой почтовый запрос не приходит. Он говорит «ожидает» в течение 4 минут, затем завершается неудачей.

Вот, что я думаю, является важной частью моего кода:

"сервер. js":

const express = require("express");
const mongoose = require("mongoose");
const morgan = require("morgan");
const path = require("path");
const cors = require("cors");

const app = express();

const PORT = process.env.PORT || 8080;

const routes = require("./routes/api");

const MONGODB_URI =
    "...";

mongoose.connect(MONGODB_URI || "mongodb://localhost/app", {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

mongoose.connection.on("connected", () => {
    console.log("Mongoose is connected.");
});

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use(cors());

app.use(morgan("tiny"));

app.use("/api", routes);

app.listen(PORT, console.log(`Server is starting at ${PORT}`));

Затем я поместил мои маршруты в другой файл "api. js":

const express = require("express");

const router = express.Router();

const Lane = require("../models/lanes");

router.get("/", (req, res) => {
    Lane.find({})
        .then(data => {
            res.json(data);
            console.log("Get request successful!");
        })
        .catch(error => {
            console.log("Error: ", error);
        });
});

router.post("/save", (req, res) => {
    const data = req.body;
    const newLane = new Lane();
    newLane.collection.insertMany(data, err => {
        if (err) {
            console.log(err);
        } else {
            console.log("Multiple docs inserted");
        }
    });
});

module.exports = router;

Я использую топор ios для отправки запроса. Это происходит после отправки формы в моем приложении.

функция редуктора:

const reducer = (state, action) => {
    switch (action.type) {
        case "add":
            axios({
                url: "http://localhost:8080/api/save",
                method: "POST",
                data: [...state, { id: uuid(), title: action.title, tasks: [] }]
            })
                .then(() => {
                    console.log("Data has been sent to the server");
                })
                .catch(() => {
                    console.log("Internal server error");
                });
            return [...state, { id: uuid(), title: action.title, tasks: [] }];

Редуктор используется моим компонентом провайдера контекста, который выглядит следующим образом:

export function LanesProvider(props) {
    const [lanes, dispatch] = useReducer(reducer, defaultLanes);

    return (
        <LanesContext.Provider value={lanes}>
            <DispatchContext.Provider value={dispatch}>
                {props.children}
            </DispatchContext.Provider>
        </LanesContext.Provider>
    );
}

Метод "add" внутри моего редуктора вызывается при отправке формы внутри другого компонента.

Пожалуйста, дайте мне знать, могу ли я добавить что-нибудь к своему вопросу, которое могло бы помочь.

Заранее спасибо!

1 Ответ

1 голос
/ 13 февраля 2020

вы не отправляете ответ клиенту. Попробуйте изменить способ записи, например

router.post("/save", (req, res) => {
const data = req.body;
const newLane = new Lane();
newLane.collection.insertMany(data, err => {
    if (err) {
        console.log(err);
        res.send(err)
    } else {
        console.log("Multiple docs inserted");
        res.send("Multiple docs inserted")
    }
});
});
...