Использование vue-apollo.js или vue.config.js для обслуживания сервера apollo graphql через https?

Я, должно быть, упускаю что-то очевидное или простое, но я просто не могу понять, как заставить сервер graphql работать через https.

Я сделал тестовое приложение, используя Vue CLI 3 (vue create test-app). Я добавляю плагин vue-apollo, используя CLI (vue add apollo).

В примере кода в vue-apollo.js упоминается:

const defaultOptions = {
  // You can use 'https' for secure connection (recommended in production)
  httpEndpoint,...

Но я не вижу, как настроить эту опцию. Я предположил, что вы могли бы сделать это через параметры в этом файле или через vue.config.js - но, возможно, я ошибаюсь?

В vue.config.js у меня есть:

module.exports = {
  pluginOptions: {
    apollo: {
      enableMocks: false,
      enableEngine: false
    }
  },
  devServer: {
    disableHostCheck: true,
    https: true
  }
}

DevServer работает по протоколу https на порту 8000 с этой опцией.

Что мне не хватает? Я подумал, может быть, это связано с этой проблемой: https://github.com/Akryum/vue-cli-plugin-apollo/issues/52

Но это, похоже, решено. Но, возможно, никакой вариант в vue.config.js не может повлиять на работу сервера так, как я хочу. Есть ли способ сделать это, передавая параметры где-нибудь через плагин vue-apollo? Или есть какой-то другой метод, о котором я не знаю.

Конструктор в vue-apollo.js выглядит так:

export function createProvider (options = {}) {
  // Create apollo client
  //console.log("CREATE PROVIDER CALLED")
  const { apolloClient, wsClient } = createApolloClient({
    ...defaultOptions,
    ...options,
  })
  apolloClient.wsClient = wsClient

  // Create vue apollo provider
  const apolloProvider = new VueApollo({
    defaultClient: apolloClient,
    defaultOptions: {
      $query: {
        // fetchPolicy: 'cache-and-network',
      },
    },
    errorHandler (error) {
      // eslint-disable-next-line no-console
      console.log('%cError', 'background: red; color: white; padding: 2px 4px; border-radius: 3px; font-weight: bold;', error.message)
    },
  })
  APOLLO_CLIENT = apolloClient;
  return apolloProvider;
}

И тогда в main.js это называется:

import Vue from 'vue'
import './plugins/vuetify'
import App from './App.vue'
import router from './router'
import { createProvider } from './vue-apollo'

Vue.config.productionTip = false

new Vue({
  router,
  apolloProvider: createProvider(),
  render: h => h(App)
}).$mount('#app')

У меня также есть промежуточное ПО Express, установленное в apollo-server/server.js:

import path from 'path'
import express from 'express'

//const distPath = path.resolve(__dirname, '../dist')
//console.log("DIST PATH: " + distPath);


export default app => {

    console.log("GOT HERE")
    app.post('/api', function (req, res, next) {
        res.send('API: ' + '');
      })
    //app.listen(443)
    //app.use(express.static(distPath))
}

Но это было просто для настройки конечной точки для приема вызовов POST.

Я поиграл с созданием нового httpsServer там с помощью Express, но также не смог добиться этого. Я следовал рекомендациям здесь: Поддержка SSL Apollo

Какие-нибудь мысли?

0 ответов

Другие вопросы по тегам