Axios关于React Dosen的帖子与后端MySQL一起使用(但在Postman上工作)

发布于 2025-02-13 16:05:32 字数 4524 浏览 0 评论 0原文

因此,我在PostAMN的后端测试了我的路线O用户,一切都可以。但是,当我在前端添加Axios来测试Axios帖子时,它向我发送了错误服务器,但我所有的值都是Okey。 我做错了什么?如果有人可以帮助我,谢谢。

这是我得到的错误,我得到

在此处输入图像描述

所以这是我的formik(formik),带有Axios要求

import React from "react";
import {ErrorMessage, useField } from 'formik';

export const TextField = ({ label, ...props}) => {
    const [field, meta] = useField(props);
    return (
        <div className="input-form">
            <label htmlFor={field.name}>{label}</label>
            <input className={`form ${meta.touched && meta.error && 'is-invalid'}`} {...field} {...props} />
            <ErrorMessage component="div" name={field.name} className="error"/>
        </div>
    )
}
import React from "react";
import {Formik, Form} from 'formik';
import { TextField } from "./TextField";
import * as Yup from 'yup';
import axios from "axios";

export const Login = () => {

    const validate = Yup.object({
        email: Yup.string()
          .email('Email is invalid')
          .required('Email is required'),
        password: Yup.string()
          //.min(6, 'Password must be at least 6 charaters')
          .required('Password is required'),
      })

   
    return (
        <Formik initialValues={{
            email: '',
            password: '',
        }}   validationSchema={validate}
        onSubmit={values => {
            
            axios({
                method: "post",
                url: `http://localhost:3001/api/auth/login`, values,
              }).then(function (res) {
                console.log("envoie-avant erreur")
                console.log(res);
                console.log(res.values);
                console.log("values");
              }).catch((err) => {
                  console.log(err); 
                  console.log("error-value")
                  console.log(values)
                  console.log("lecture de values après refus")
                });
            console.log(values)
            console.log("test-values")
        }}
        >
            
        { formik => (
          <div className="size-column-form">
          <h1>Login</h1>
           <Form>
                <TextField label="Email" name="email" type="email"/> 
                <TextField label="password" name="password" type="password"/>
                <button className="btn-bleu" type="submit">Se Connecter</button>               
           </Form>
      </div>
        )}
    </Formik>
    )
}

这是我的app.js,带有路线和自动化cors

const express = require("express");
//crééer un application express
const path = require("path");
const Sequelize = require("sequelize");
const app = express();


//variable d'environnement

require("dotenv").config();
console.log(process.env);

//const morgan = require("morgan");

//mysql importation connexion

//app.use(morgan("dev"));
//import des routes
const authRoutes = require("./routes/user");

//intercepter toute requête d'un contenttype.json
app.use(express.json());

const cors = require('cors');
const corsOptions ={
    origin:'http://localhost:3000/', 
    credentials:true,            //access-control-allow-credentials:true
    optionSuccessStatus:200
}
app.use(cors({credentials: true, origin: 'http://localhost:3000/'}));

// middlewear general qui s'applique à toute les roots qui permet de gerer les CORS
app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content, Accept, Content-Type, Authorization",
    "x-access-token, Origin, Content-Type, Accept"
  );
  res.setHeader("Access-Control-Allow-Credentials", "true");
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PUT, DELETE, PATCH, OPTIONS"
  );
  next();
});

//Gestion de la ressource images de façon statique
app.use("/images", express.static(path.join(__dirname, "images")));

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

// pour exporter l'application/constante pour acceder aux fichiers depuis notre server node

module.exports = app;

So I test my routes o user on my backend with POSTAMN and everything works. But when I add axios on frontend to test the AXIOS POST, it sent me error server but all my values are okey.
What I do wrong ? If somebody can help me, thanks.

Here is the error I get

enter image description here

so this is my form (formik) with axios request

import React from "react";
import {ErrorMessage, useField } from 'formik';

export const TextField = ({ label, ...props}) => {
    const [field, meta] = useField(props);
    return (
        <div className="input-form">
            <label htmlFor={field.name}>{label}</label>
            <input className={`form ${meta.touched && meta.error && 'is-invalid'}`} {...field} {...props} />
            <ErrorMessage component="div" name={field.name} className="error"/>
        </div>
    )
}
import React from "react";
import {Formik, Form} from 'formik';
import { TextField } from "./TextField";
import * as Yup from 'yup';
import axios from "axios";

export const Login = () => {

    const validate = Yup.object({
        email: Yup.string()
          .email('Email is invalid')
          .required('Email is required'),
        password: Yup.string()
          //.min(6, 'Password must be at least 6 charaters')
          .required('Password is required'),
      })

   
    return (
        <Formik initialValues={{
            email: '',
            password: '',
        }}   validationSchema={validate}
        onSubmit={values => {
            
            axios({
                method: "post",
                url: `http://localhost:3001/api/auth/login`, values,
              }).then(function (res) {
                console.log("envoie-avant erreur")
                console.log(res);
                console.log(res.values);
                console.log("values");
              }).catch((err) => {
                  console.log(err); 
                  console.log("error-value")
                  console.log(values)
                  console.log("lecture de values après refus")
                });
            console.log(values)
            console.log("test-values")
        }}
        >
            
        { formik => (
          <div className="size-column-form">
          <h1>Login</h1>
           <Form>
                <TextField label="Email" name="email" type="email"/> 
                <TextField label="password" name="password" type="password"/>
                <button className="btn-bleu" type="submit">Se Connecter</button>               
           </Form>
      </div>
        )}
    </Formik>
    )
}

And this is my app.js with route and autorization CORS

const express = require("express");
//crééer un application express
const path = require("path");
const Sequelize = require("sequelize");
const app = express();


//variable d'environnement

require("dotenv").config();
console.log(process.env);

//const morgan = require("morgan");

//mysql importation connexion

//app.use(morgan("dev"));
//import des routes
const authRoutes = require("./routes/user");

//intercepter toute requête d'un contenttype.json
app.use(express.json());

const cors = require('cors');
const corsOptions ={
    origin:'http://localhost:3000/', 
    credentials:true,            //access-control-allow-credentials:true
    optionSuccessStatus:200
}
app.use(cors({credentials: true, origin: 'http://localhost:3000/'}));

// middlewear general qui s'applique à toute les roots qui permet de gerer les CORS
app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content, Accept, Content-Type, Authorization",
    "x-access-token, Origin, Content-Type, Accept"
  );
  res.setHeader("Access-Control-Allow-Credentials", "true");
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PUT, DELETE, PATCH, OPTIONS"
  );
  next();
});

//Gestion de la ressource images de façon statique
app.use("/images", express.static(path.join(__dirname, "images")));

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

// pour exporter l'application/constante pour acceder aux fichiers depuis notre server node

module.exports = app;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

始终不够 2025-02-20 16:05:32

我找到了解决方案,所以在我的轴上我必须添加
“数据:值,
标题:{
'content-type':'应用程序/json'
},,
身体:json.stringify(values),})”
所以给予

validationSchema={validate} onSubmit={values => {
          axios({
            method: "post",
            url: `http://localhost:3001/api/auth/login`, 
            data: values,
            headers: {
              'Content-Type': 'application/json'
               },
              body: JSON.stringify(values),
          }) .then((res) => {
            console.log(res);
            if (res.data.errors) {
              emailError.innerHTML = res.data.errors.values;
              
            } else {
              window.location = "/home";
            }
          })
          .catch((err) => {
            console.log(err);
          });
        }}

在我的CORS后端,我做到了:

const cors = require('cors');
const corsOptions ={
    origin:'http://localhost:3000/', 
    credentials:true,            //access-control-allow-credentials:true
    optionSuccessStatus:200
}
app.use(cors({credentials: true, origin: 'http://localhost:3000'}));

// middlewear general qui s'applique à toute les roots qui permet de gerer les CORS
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', "*");
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
  res.header("Access-Control-Allow-Credentials", "true");
  next();
});

因此,这是解决的,我发现了具有Doc Axios的这种类型的Axios: https://axios-httpp.com /docs/api_intro
当我看到Axios不起作用时,我尝试使用methode提取: https://jasonwatmore.com/post/2020/02/01/react-fetch-http-post-post-request-request-examples

I found the solution, so in my axios I had to add
"data: values,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(values), })"
So it give

validationSchema={validate} onSubmit={values => {
          axios({
            method: "post",
            url: `http://localhost:3001/api/auth/login`, 
            data: values,
            headers: {
              'Content-Type': 'application/json'
               },
              body: JSON.stringify(values),
          }) .then((res) => {
            console.log(res);
            if (res.data.errors) {
              emailError.innerHTML = res.data.errors.values;
              
            } else {
              window.location = "/home";
            }
          })
          .catch((err) => {
            console.log(err);
          });
        }}

And on my CORS BACKEND I made this:

const cors = require('cors');
const corsOptions ={
    origin:'http://localhost:3000/', 
    credentials:true,            //access-control-allow-credentials:true
    optionSuccessStatus:200
}
app.use(cors({credentials: true, origin: 'http://localhost:3000'}));

// middlewear general qui s'applique à toute les roots qui permet de gerer les CORS
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', "*");
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
  res.header("Access-Control-Allow-Credentials", "true");
  next();
});

So this is solve and I found this type of Axios with doc Axios : https://axios-http.com/docs/api_intro
And when I saw that axios doesn't work I try with methode fetch: https://jasonwatmore.com/post/2020/02/01/react-fetch-http-post-request-examples

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文