- Обновить надстройку для беспрепятственной работы с версией cppgraphqlgen
4.5.8. - Изучить новые подходы к интеграции этого дополнения с веб-интерфейсом GraphiQL
, включая динамическое выполнение запросов.
Исходные файлы, задействованные в проекте:
- main.cpp
- GreetImpl.h< /li>
GreetImpl.cpp - schema.greet.graphql
- binding.gyp
Реализация GreetImpl.cpp на данный момент обрабатывает простое приветственное сообщение с помощью cppgraphqlgen версии 3.6.0, но при обновлении до версии 4.5.8 возникают проблемы.
Исходный код скомпилирован с использованием node-gyp. Ниже приведена структура желаемой функциональности:- Дополнительные операции Node.js
- startService()
- stopService()
fetchQuery(query: string): строка
Вот как надстройка используется в среде Node.js:Код: Выделить всё
//index.js const addon = require('./build/Release/greet.node'); addon.startService(); console.log(addon.fetchQuery(` { hello { greet } greetmsg } `), '', '') addon.stopService();- Интеграция с веб-интерфейсом GraphiQL
Ключевые вопросы:Код: Выделить всё
//server.js const express = require("express"); const { graphqlHTTP } = require("express-graphql"); const addon = require("./build/Release/greet.node"); // Initialize C++ service addon.startService(); // Define a custom resolver const customResolver = async ({ query, variables }) => { const result = addon.fetchQuery(JSON.stringify({ query, variables })); return JSON.parse(result); // Return parsed JSON }; // GraphQL Middleware const graphqlMiddleware = graphqlHTTP(async (req) => ({ schema: require('fs').readFileSync(__dirname + '/src/schema/schema.greet.graphql').toString(), // Schema is dynamically handled by cppgraphqlgen customExecuteFn: ({ document, variables }) => customResolver({ query: document.loc.source.body, variables }), graphiql: true, })); const app = express(); app.use("/graphql", graphqlMiddleware); // Start the server const PORT = 4000; app.listen(PORT, () => { console.log(`GraphQL API available at http://localhost:${PORT}/graphql`); }); // Cleanup on exit process.on("SIGINT", () => { addon.stopService(); process.exit(); });- Обновление до cppgraphqlgen 4.5.8:
- Какие изменения необходимы для обновления GreetImpl.cpp для поддержки новой версии?
- Есть ли любые конкретные проблемы совместимости или критические изменения в версии 4.5.8 по сравнению с 3.6.0?
- Интеграция GraphiQL:
- Как можно легко интегрировать надстройку узла с GraphiQL для динамической обработки схемы и запросов?
- Использует ли описанный выше подход промежуточного программного обеспечения GraphQL собственный преобразователь и express-graphql правильные, или есть что-то лучше альтернативы?
- Компиляция с помощью node-gyp:
- Требуются ли какие-либо дополнительные настройки в файлеbinding.gyp для поддержки изменений в cppgraphqlgen 4.5.8?
Вот файлы проекта для справки:- main.cpp
[img]https:// i.sstatic.net/yk2kMXj0.jpg[/img] - GreetImpl.h

- GreetImpl.cpp
[img]https://i .sstatic.net/TM2p7mEJ.jpg[/img] - schema.greet.graphql

- binding.gyp
[img]https://i .sstatic.net/xFsqmJXi.png[/img]
Подробнее здесь: https://stackoverflow.com/questions/792 ... nd-graphiq