返回

对接GraphQL Mock Server,这几点你需要注意!

前端

跨域问题概述

当浏览器从一个域名的网页向另一个域名的服务器发送请求时,就会发生跨域问题。这主要是出于安全考虑,浏览器会限制跨域请求,以防止恶意网站窃取敏感信息。

解决方案:使用 core.js

core.js 是一个 JavaScript 库,可以帮助解决跨域问题。它可以在客户端和服务器端使用,支持多种跨域解决方案,如 CORS、JSONP 和 WebSocket。

具体步骤

  1. 安装 core.js
npm install core-js
  1. 在您的 HTML 页面中引入 core.js
<script src="path/to/core.js"></script>
  1. 在您的 JavaScript 代码中,使用 core.js 的 polyfill 功能来支持跨域请求。
core.polyfill();
  1. 在您的 GraphQL Mock Server 中,添加 CORS 头。
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
  next();
});

示例代码

// 前端代码

const requestBody = {
  query: `
    query {
      posts {
        id
        title
        content
      }
    }
  `,
};

fetch('http://localhost:3000/graphql', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(requestBody),
})
.then(res => res.json())
.then(data => console.log(data))
.catch(error => console.error(error));

// 后端代码

const express = require('express');
const cors = require('cors');
const graphqlHTTP = require('express-graphql');
const schema = require('./schema');

const app = express();

app.use(cors());

app.use('/graphql', graphqlHTTP({
  schema: schema,
  graphiql: true,
}));

app.listen(3000);

注意事项

  • 确保您的 GraphQL Mock Server 在与前端相同的域上运行。
  • 如果您在本地开发,可以使用 ngrok 或 localtunnel 等工具来创建安全的隧道,以便在本地访问您的 GraphQL Mock Server。
  • 您可能还需要在您的 GraphQL Mock Server 中添加身份验证和授权机制,以确保只有授权用户才能访问您的 API。

总结

通过使用 core.js 和 CORS 头,您可以轻松解决 GraphQL Mock Server 的跨域问题。这将使您能够在前端开发过程中轻松地与 GraphQL Mock Server 交互,并避免跨域错误。