将 https 添加到 webpack 代理的 graphql express 端点

Posted

技术标签:

【中文标题】将 https 添加到 webpack 代理的 graphql express 端点【英文标题】:Adding https to a graphql express endpoint proxied by webpack 【发布时间】:2016-05-06 13:04:40 【问题描述】:

我正在使用 webpack、express 和 graphql 构建一个应用程序。 Express 服务于 express-graphql 端点,然后由 webpack-dev-server 代理。我想知道如何将 https 添加到该端点。

我没有使用 ssl 的经验,并且使用 express 和 webpack 的经验有限。我什至不确定问题是如何保护代理、快速服务器或 express-graphql 端点。

附带说明一下,我还使用 auth0 添加了用户身份验证,这似乎工作正常。

server.js

import express from 'express';
import graphQLHTTP from 'express-graphql';
import jwt from 'express-jwt';
import path from 'path';
import webpack from 'webpack';
import WebpackDevServer from 'webpack-dev-server';
import Schema from './data/schema';

const APP_PORT = process.env.PORT || 3000;
const GRAPHQL_PORT = 8080;
const AUTH0_ID = process.env.AUTH0_ID;
const AUTH0_SECRET = process.env.AUTH0_SECRET;

const authenticate = jwt(
  secret: new Buffer(AUTH0_SECRET, 'base64'),
  audience: AUTH0_ID,
);

// Expose a GraphQL endpoint
const graphQLServer = express();
graphQLServer.use('/', authenticate, graphQLHTTP(request => (
  graphiql: true,
  pretty: true,
  schema: Schema,
  rootValue:  user: request.user ,
)));
graphQLServer.listen(GRAPHQL_PORT, () => console.log(
  `GraphQL Server is now running on http://localhost:$GRAPHQL_PORT`
));

// Serve the Relay app
...

const app = new WebpackDevServer(compiler, 
  contentBase: '/public/',
  proxy: '/graphql': `http://localhost:$GRAPHQL_PORT`,
  publicPath: '/app/',
  stats: colors: true, chunks: false,
);

// Handle incoming routes
app.use('/', (req, res) => 
  res.sendFile(path.join(__dirname + '/public/index.html'));
);

app.listen(APP_PORT, () => 
  console.log(`App is now running on http://localhost:$APP_PORT`);
);

【问题讨论】:

【参考方案1】:

我认为您希望保护任何面向公众的端点。不推荐在生产环境中使用 webpack 开发服务器,但如果您确实需要使用 https,那么 webpack 开发服务器确实提供了support for doing so。

【讨论】:

您知道该选项是保护代理还是仅保护输出? 它只会将 webpack 开发服务器放在 https 后面,而不是 express 服务器。为了确保 express 的安全,您还需要查看有关如何做到这一点的文档。 我一直在尝试从文档中复制示例。这里奇怪的是 express-graphql 将 express 服务器作为参数,然后 webpack 代理 express-graphql 服务器。所以有 3 种不同的 API,我不知道哪些需要 ssl 配置。

以上是关于将 https 添加到 webpack 代理的 graphql express 端点的主要内容,如果未能解决你的问题,请参考以下文章

Vue项目实战将接口用 webpack 代理到本地

HTTPS代理环境,npm安装webpack

使用角度,打字稿,webpack时如何将jquery添加到窗口对象

webpack配置proxy反向代理,解决跨域问题

VueJs 填坑日记之将接口用webpack代理到本地

将引导程序添加到 angular2-seed 项目的 webpack 包中