Я пытаюсь создать простой api
на своем бэкэнде, используя graphql-yoga
. У меня есть два файла: index.js
, где вызывается файл маршрута и инициализируется graphql-yoga, а сервер работает; и второй файл, routes.js
, где определяются все другие маршруты API.
При доступе к любому URL-адресу non graphql в браузере с действительным ключом API, например: mylocalhost.tld/anything?api_key=randomValues
, я могу получить доступ к ресурсам без каких-либо сообщений об ошибках. Но при доступе к маршруту graphql, например: mylocalhost.tld/graphql?api_key=randomValues
я получаю Not Found
обратную связь.
Когда я закомментирую routes(app);
в index.js
и получу доступ mylocalhost.tld/graphql/(*)
, где (*) может быть игровой площадкой, я получу доступ к ресурсам graphql.
Так что мне нужна помощь, чтобы иметь возможность получить доступ к mylocalhost.tld/graphql/(*)
без получения сообщения об ошибке 404.
index.js
/**
* index.js
*/
// graphql
import { GraphQLServer } from 'graphql-yoga';
import graphql from '../graphql/schema';
// other imports
import routes from './routes';
import os from 'os';
// host
const host = "http://" + (process.env.NODE_ENV === 'production' ? os.hostname() : "localhost");
const port = process.env.PORT || 3060;
// options
const opts = {
endpoint: '/graphql',
port: port,
tracing: true,
playground: '/graphql/playground',
cors: {
origin: [host + ":3000"] // your frontend url.
},
}
// context
const context = (req) => ({
req: req,
});
// server
const server = new GraphQLServer({
schema: graphql,
// Align with behavior from express-graphql
context: context,
});
// express
const app = server.express;
//Routes "./routes.js"
routes(app);
/**
* Start server
*/
server.start(opts, () => console.log(
'Server listening at %s:%s in %s environment. \n',
host,
port,
app.set('env'),
),
);
export default app;
// ------------------------------------------------------------------ //
routes.js
/**
* routes.js
*/
import authApi from '../lib/api';
export default (app) => {
app.use('*', authApi); // this lets all routes request for a valid api key before delivering resources
/**
* Extract GraphQL API Key
*/
app.use('/graphql/:api_key?', (req, res, next) => {
req.api_key = req.params.api_key;
next();
});
}; // end of app