猿问

Express Router 端点的 CORS 问题

我有一个反应应用程序,它正在对一个快速节点服务器进行 REST。


快速路由器定义了一堆休息端点。


当我使用邮递员点击快速路由器中的端点时,它工作正常。


当我用我的反应应用程序到达端点时,它没有。当我的反应应用程序使用 axios 进行调用时,我看到 400 错误。


这就是我的 index.js 的样子:


const express = require("express");

const mongoose = require("mongoose");

const bodyParser = require("body-parser");

const passport = require("passport");

const cors = require("cors");


const app = express();

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

// server.use(bodyParser.json());

app.use(cors());

// app.options("*", cors());


const UserModel = require("./models/User");


mongoose

  .connect(

    "mongodb"

  )

  .then(() => console.log("SUCESSFULLY connected to MongoDB!"))

  .catch((error) => console.log(`FAILED tot connect to MongoDB: ${error}`));


require("./auth/localStrategyAuth");


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

app.use("/v1", authRoutes);


// app.post("/", (req, res) => {

//   res.send("Hello World!");

// });

// app.post("/v1/signup", (req, res) => {

//   console.log("lol");

// });


// app.use(express.json());

const PORT = 5000;

app.listen(PORT, () =>

  console.log(`ui-rest listening on port localhost:${PORT}`)

);


用户.js


const mongoose = require("mongoose");

const bcrypt = require("bcrypt");

const { Schema } = mongoose;


const UserSchema = new Schema({

  email: {

    type: String,

    required: true,

    unique: true,

  },

  password: {

    type: String,

    required: true,

  },

});


const UserModel = mongoose.model("user", UserSchema);

module.exports = UserModel;

authRoutes.js


const express = require("express");

const passport = require("passport");

const jwt = require("jsonwebtoken");

const JWTstrategy = require("passport-jwt").Strategy;

//We use this to extract the JWT sent by the user

const ExtractJWT = require("passport-jwt").ExtractJwt;


const router = express.Router();



喵喔喔
浏览 175回答 3
3回答

慕斯709654

400 表示请求错误,您的问题与 cors 无关。您没有设置您的 api 来处理响应发送的 JSON 数据,因此它无法读取您的 request.body 并给出 400-Bad Request。所以你需要添加这一行:app.use(bodyParser.json());同样在当前版本的 express 中,body parser 不是必需的,它带有 express。所以你可以像这样使用它:app.use(express.json());它与邮递员合作的原因是您以 x-www-form-urlencoded 发送数据。

翻过高山走不出你

您可以使用检查我的代码是否有 cors 错误。const express = require('express');var mongoose = require('mongoose');const bodyParser = require('body-parser');var morgan = require('morgan');var cors = require('cors')const app = express();// CORS Middlewareapp.use(cors());// Logger Middlewareapp.use(morgan('dev'));// Bodyparser Middlewareapp.use(bodyParser.json());const MongoClient = require('mongodb').MongoClient;const uri = "uri";const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });client.connect(err => {  console.log('MongoDB Connected...')  const collection = client.db("dbname").collection("collectionname");  app.post('/name', (req, res) => {    collection. insertOne({ name: req.body.name })    res.send("data added")  });});const port = process.env.PORT || 5000;app.listen(port, function () {  console.log(`Example app listening on port ${port}`);});

郎朗坤

您需要将 cors 中间件注册到 express 应用程序中。const express = require("express");const bodyParser = require("body-parser");const cors = require("cors");const app = express();app.use(cors());app.post("/", (req, res) => {  res.send("Hello World!");});const PORT = 5000;app.listen(PORT, () => console.log(`listening on port localhost:${PORT}`)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答