Запросить API-интерфейс Graphql, работающий на другом порту из приложения Next.js, в режиме разработки localhost

В настоящее время я переключаю свое существующее приложение с create-response-app на next.js, похоже, все работает правильно, за исключением моей конечной точки api, запущенной в другом приложении node на порту 4000, к которому я не могу получить доступ из моего приложения next.js . Я следил за примерами в репо, но не могу заставить его работать. В производстве я использую nginx в качестве обратного прокси без проблем, но я в режиме разработки. Для настройки Apollo с Redux я следовал этому примеру: with-apollo-and-redux, а для прокси я использовал этот пример with-custom-reverse-proxy

Я знаю, что-то делаю не так, сейчас просто не могу понять

в initApollo.js

...    
function create() {
      return new ApolloClient({
        ssrMode: !process.browser,
        networkInterface: createNetworkInterface({
          uri: "/api" 
        })
      });
    }
...

в server.js

...    
const devProxy = {
      "/api/": {
        target: "http://localhost:4000/api/",
        changeOrigin: true
      }
    };

    app
      .prepare()
      .then(() => {
        const server = express();

        if (dev && devProxy) {
          const proxyMiddleware = require('http-proxy-middleware')
          Object.keys(devProxy).forEach(function (context) {
            server.use(proxyMiddleware(context, devProxy[context]))
          })
        }

        server.all("*", (req, res) => handle(req, res));

        server.listen(3000, err => {
          if (err) throw err;
          console.log("> Ready on http://localhost:3000");
        });
      })
      .catch(ex => {
        console.error(ex.stack);
        process.exit(1);
      });

person devoka    schedule 27.08.2017    source источник
comment
также, если кто-то может предоставить ссылку на учебник или статью, тоже будет здорово   -  person devoka    schedule 27.08.2017


Ответы (1)


Хорошо, я наконец нашел проблему, которая НЕ связана с Next.js или клиентом Apollo. но вместо этого все о моем сервере, работающем на порту 4000 (мой сервер graphql). Мне приходилось иметь дело с CORS и промежуточным программным обеспечением Express express-graphql, которое, я думаю, не поддерживается по умолчанию.

поэтому я добавляю на свой сервер, на котором запущен graphql, следующее

app.use("/api", function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Content-Type, Authorization, Content-Length, X-Requested-With"
  );
  if (req.method === "OPTIONS") {
    res.sendStatus(200);
  } else {
    next();
  }
});

а также в клиенте apollo мне пришлось указать абсолютный путь к моему серверу api

networkInterface: createNetworkInterface({
      uri: "http://localhost:4000/api/"
    })

это оно

person devoka    schedule 27.08.2017