为了账号安全,请及时绑定邮箱和手机立即绑定

Express Router 端点的 CORS 问题

Express Router 端点的 CORS 问题

喵喔喔 2022-06-16 10:10:00
我有一个反应应用程序,它正在对一个快速节点服务器进行 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}`));用户.jsconst 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.jsconst 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 userconst ExtractJWT = require("passport-jwt").ExtractJwt;const router = express.Router();
查看完整描述

3 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

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 发送数据。

//img1.sycdn.imooc.com//62aa91210001f4bd09710485.jpg

查看完整回答
反对 回复 2022-06-16
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您可以使用检查我的代码是否有 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 Middleware

app.use(cors());

// Logger Middleware

app.use(morgan('dev'));

// Bodyparser Middleware

app.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}`);

});


查看完整回答
反对 回复 2022-06-16
?
郎朗坤

TA贡献1921条经验 获得超9个赞

您需要将 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}`)


查看完整回答
反对 回复 2022-06-16
  • 3 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号