Axios POST请求不起作用React NodeJS MongoDB

aor9mmx1  于 2022-10-22  发布在  iOS
关注(0)|答案(2)|浏览(155)

我试图将数据发布到Mongoose数据库,但我一直收到Axios错误404。我需要帮助。我的代码中有什么错误吗?
这是我的模式,它包含网站的前端

AddForm.jsx

import React, { useState } from "react";
import axios, { Axios } from "axios";

const AddForm = () =>{

    const [appData, setAppData] = useState({
        pName:"",
        appNum:"",
        datetime:"",
    })

const submit =(e) =>{
    e.preventDefault();
    axios.post("/addAppDetails", {
        pName: appData.pName, 
        appNum: appData.appNum, 
        datetime: appData.datetime, 
    })
    .then(res =>{
        console.log(res.appData)
    })
    .catch((error)=>{
        console.log(error);
      });
}

const handle = (e) => {
    const newData={...appData}
    newData[e.target.id] = e.target.value
    setAppData(newData)
    console.log(newData)
}

    return(
        <Form onSubmit={(e) => submit(e)}>
            <Form.Group>
                <Form.Control
                id="pName"
                type="text"
                placeholder="Patient Name"
                onChange={(e) => handle(e)}
                value={appData.pName}
                required/>
            </Form.Group>
            <Form.Group>
                <Form.Control
                id="appNum"
                type="text"
                placeholder="Appointment Number"
                onChange={(e) => handle(e)}
                required/>
            </Form.Group>
            <Form.Group>
                <Form.Control
                id="datetime"
                as="textarea"
                placeholder="Date and Time"
                onChange={(e) => handle(e)}
                required/>
            </Form.Group>

            <Button variant="success" type="submit" block>Update Appointment</Button>
        </Form>
    )
}

export default AddForm;

这是我的后端,它包含用于功能的路由/API

server.js

const express = require("express");
const app = express();
const mongoose = require("mongoose");
const cors = require("cors");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");

app.use(express.json()); //prints body request
app.use(cors());

const JWT_SECRET = "sdaikdhjiIHDiu8987J(@?!dDSF8645DAsadA[]ds54aASD()21asd1SFP";
const mongooseURL =
  "mongodb+srv://client:lolpassword@cluster0.lfrgaha.mongodb.net/?retryWrites=true&w=majority";

//server
app.listen(5001, () => {
  console.log("Server started successfully.");
});

//connect with DB
mongoose
  .connect(mongooseURL, {
    useNewUrlParser: true,
  })
  .then(() => {
    console.log("Connected to database successfully");
  })
  .catch((e) => console.log(e));

require("./models/appointmentDetails");
const AppDetails = mongoose.model("AppointmentDetails");

//add data to db
app.post("/addAppDetails", async(req, res) => {

  const newAppDetails = new AppDetails(req.body);

  try{
      newAppDetails.save();
      res.send(newAppDetails);
  }
  catch(err){
      console.log(err);
      res.status(500).send(error);
  }
});

这是我的数据库模型。

aportmentDetails.js

const AppDetails = new mongoose.Schema(
    {
        pName: String,
        appNum: String,
        datetime: String,
        status: String,
        action: String,
    },
    {
        collection: "AppointmentDetails",
    }
);

mongoose.model("AppointmentDetails", AppDetails);
6mw9ycah

6mw9ycah1#

简答

添加baseURL

答案冗长

Axios需要baseURL

const submit = (e) => {
  e.preventDefault();
  axios
    .post(
      '/addAppDetails',
      {
        pName: appData.pName,
        appNum: appData.appNum,
        datetime: appData.datetime,
      },
      {
        baseURL: 'http://localhost:5001', // or your hosting server
      }
    )
    .then((res) => {
      console.log(res.appData);
    })
    .catch((error) => {
      console.log(error);
    });
};

但是上面的方法很麻烦,因为您必须一直设置baseURL。因此,创建自定义配置AXIOS示例并在全局使用它。

// ./lib/axios.js  or whatever
export const axiosClient = axios.create({
  baseURL: process.env.MY_API_SERVER_URL || 'http://localhost:5001',
  headers: {
    // whatever you want to add to the headers
  },
  // and whatever your server requires
});
// just use your code with replacing axios to custom axios instance
axiosClient.post('/addAppDetails', {
  pName: appData.pName,
  appNum: appData.appNum,
  datetime: appData.datetime,
})
2izufjch

2izufjch2#

意味着您用来发送请求和期望响应的URL(包括http://host:port))在您的情况下不存在。
在发送请求时,使用日志或记录每个请求信息的全局中间件功能检查您的节点服务器是否正在接收响应。这样,您将看到服务器是否正在接收请求,从而找到问题所在。
正如answer by @thillon中所建议的,在您的情况下,url很可能是不完整的(不包含服务器的host:port部分),因此您可以按照他们的方法来确保您的请求url是正确的,从而确保您的服务器能够接收请求。

全球中间件功能

将这段代码写在app.use(express.json())语句之后。

app.use((req, res, next) => {
    console.log(req.body)
    // or log anything helpful in the req object
    next();
})

相关问题