Javascript 无法修复post请求中的CORS

Javascript 无法修复post请求中的CORS,javascript,node.js,post,cors,mern,Javascript,Node.js,Post,Cors,Mern,我正在创建一个MERN stack项目,在这里我需要进行注册和登录请求 我无法从客户端发出POST请求,这是抛出错误 ` ` 代码是- cors.js const cors = require("cors"); const whitelist = [ "http://localhost:3000", "https://localhost:3443", "http://localhost:3001" ]; var corsOp

我正在创建一个MERN stack项目,在这里我需要进行注册和登录请求

我无法从客户端发出POST请求,这是抛出错误

`

`

代码是-

cors.js


    const cors = require("cors");

    const whitelist = [
      "http://localhost:3000",
      "https://localhost:3443",
      "http://localhost:3001"
    ];
    var corsOptionsDelegate = (req, callback) => {
      var corsOptions;
      console.log(req.header("Origin"));
      if (whitelist.indexOf(req.header("Origin")) !== -1) {
        corsOptions = { origin: true };
      } else {
        corsOptions = { origin: false };
      }
      callback(null, corsOptions);
    };

    exports.cors = cors();
    exports.corsWithOptions = cors(corsOptionsDelegate);

...

    const cors = require("../auth/cors.js");

    const userRouter = express.Router(); // initialize express router

    userRouter
      .post("/signup", cors.corsWithOptions, (req, res, next) => {
        console.log(req.body);
        User.register(
          new User({
            username: req.body.username,
            email: req.body.email,
            firstName: req.body.firstName,
            lastName: req.body.lastName
          }),
          req.body.password,
          (err, user) => {
            if (err) {
              res.statusCode = 500;
              res.setHeader("Content-Type", "application/json");
              res.json({ err: err });
            } else {
              if (req.body.firstName) user.firstName = req.body.firstName;
              if (req.body.lastName) user.lastName = req.body.lastName;
              user.save((err, user) => {
                if (err) {
                  res.statusCode = 500;
                  res.setHeader("Content-Type", "application/json");
                  res.json({ err: err });
                  return;
                }
                passport.authenticate("local")(req, res, () => {
                  res.statusCode = 200;
                  res.setHeader("Content-Type", "application/json");
                  res.json({ success: true, status: "Registration Successful!" });
                });
              });
            }
          }
        );
      })

    ...


    signup = e => {
    if (!isEmpty) {
          const newUser = this.state.userDetail;
          console.log(newUser);
          this.setState({ loadingIsTrue: true });
          // axios
          //   .get(process.env.REACT_APP_API_BASE_URL + "users/list")
          //   .then(res => console.log(res))
          //   .catch(err => console.log(err));
          axios
            .post(process.env.REACT_APP_API_BASE_URL + "users/signup", {
              ...newUser
            })
            .then(res => console.log(res))
            .catch(err => console.log(err));
        } else alert("Please fill all the details first to signup");
      };

节点用户.router.js


    const cors = require("cors");

    const whitelist = [
      "http://localhost:3000",
      "https://localhost:3443",
      "http://localhost:3001"
    ];
    var corsOptionsDelegate = (req, callback) => {
      var corsOptions;
      console.log(req.header("Origin"));
      if (whitelist.indexOf(req.header("Origin")) !== -1) {
        corsOptions = { origin: true };
      } else {
        corsOptions = { origin: false };
      }
      callback(null, corsOptions);
    };

    exports.cors = cors();
    exports.corsWithOptions = cors(corsOptionsDelegate);

...

    const cors = require("../auth/cors.js");

    const userRouter = express.Router(); // initialize express router

    userRouter
      .post("/signup", cors.corsWithOptions, (req, res, next) => {
        console.log(req.body);
        User.register(
          new User({
            username: req.body.username,
            email: req.body.email,
            firstName: req.body.firstName,
            lastName: req.body.lastName
          }),
          req.body.password,
          (err, user) => {
            if (err) {
              res.statusCode = 500;
              res.setHeader("Content-Type", "application/json");
              res.json({ err: err });
            } else {
              if (req.body.firstName) user.firstName = req.body.firstName;
              if (req.body.lastName) user.lastName = req.body.lastName;
              user.save((err, user) => {
                if (err) {
                  res.statusCode = 500;
                  res.setHeader("Content-Type", "application/json");
                  res.json({ err: err });
                  return;
                }
                passport.authenticate("local")(req, res, () => {
                  res.statusCode = 200;
                  res.setHeader("Content-Type", "application/json");
                  res.json({ success: true, status: "Registration Successful!" });
                });
              });
            }
          }
        );
      })

    ...


    signup = e => {
    if (!isEmpty) {
          const newUser = this.state.userDetail;
          console.log(newUser);
          this.setState({ loadingIsTrue: true });
          // axios
          //   .get(process.env.REACT_APP_API_BASE_URL + "users/list")
          //   .then(res => console.log(res))
          //   .catch(err => console.log(err));
          axios
            .post(process.env.REACT_APP_API_BASE_URL + "users/signup", {
              ...newUser
            })
            .then(res => console.log(res))
            .catch(err => console.log(err));
        } else alert("Please fill all the details first to signup");
      };

react signup.component.js


    const cors = require("cors");

    const whitelist = [
      "http://localhost:3000",
      "https://localhost:3443",
      "http://localhost:3001"
    ];
    var corsOptionsDelegate = (req, callback) => {
      var corsOptions;
      console.log(req.header("Origin"));
      if (whitelist.indexOf(req.header("Origin")) !== -1) {
        corsOptions = { origin: true };
      } else {
        corsOptions = { origin: false };
      }
      callback(null, corsOptions);
    };

    exports.cors = cors();
    exports.corsWithOptions = cors(corsOptionsDelegate);

...

    const cors = require("../auth/cors.js");

    const userRouter = express.Router(); // initialize express router

    userRouter
      .post("/signup", cors.corsWithOptions, (req, res, next) => {
        console.log(req.body);
        User.register(
          new User({
            username: req.body.username,
            email: req.body.email,
            firstName: req.body.firstName,
            lastName: req.body.lastName
          }),
          req.body.password,
          (err, user) => {
            if (err) {
              res.statusCode = 500;
              res.setHeader("Content-Type", "application/json");
              res.json({ err: err });
            } else {
              if (req.body.firstName) user.firstName = req.body.firstName;
              if (req.body.lastName) user.lastName = req.body.lastName;
              user.save((err, user) => {
                if (err) {
                  res.statusCode = 500;
                  res.setHeader("Content-Type", "application/json");
                  res.json({ err: err });
                  return;
                }
                passport.authenticate("local")(req, res, () => {
                  res.statusCode = 200;
                  res.setHeader("Content-Type", "application/json");
                  res.json({ success: true, status: "Registration Successful!" });
                });
              });
            }
          }
        );
      })

    ...


    signup = e => {
    if (!isEmpty) {
          const newUser = this.state.userDetail;
          console.log(newUser);
          this.setState({ loadingIsTrue: true });
          // axios
          //   .get(process.env.REACT_APP_API_BASE_URL + "users/list")
          //   .then(res => console.log(res))
          //   .catch(err => console.log(err));
          axios
            .post(process.env.REACT_APP_API_BASE_URL + "users/signup", {
              ...newUser
            })
            .then(res => console.log(res))
            .catch(err => console.log(err));
        } else alert("Please fill all the details first to signup");
      };

注意:当邮递员发出请求时,请求成功,数据库已正确更新

请参见:

某些CORS请求被视为“复杂”,需要初始选项请求(称为“飞行前请求”)。“复杂”CORS请求的一个示例是使用GET/HEAD/POST以外的HTTP谓词(例如DELETE)或使用自定义头的请求。要启用预飞行,必须为要支持的路线添加新的选项处理程序

您只将CORS中间件绑定到了
用户路由器。post

请参阅:

某些CORS请求被视为“复杂”,需要初始选项请求(称为“飞行前请求”)。“复杂”CORS请求的一个示例是使用GET/HEAD/POST以外的HTTP谓词(例如DELETE)或使用自定义头的请求。要启用预飞行,必须为要支持的路线添加新的选项处理程序

您只将CORS中间件绑定到了
userRouter.post