Как выполнить запрос GraphQL с сервера
Я использую graphql-express для создания конечной точки, где я могу выполнять запросы graphql. Хотя я использую Sequelize с базой данных SQL, неправильно использовать ее непосредственно с сервера за пределами моего graphql resolve
функции. Как я могу запросить API graphql с того же сервера, на котором он был определен?
вот как я настраиваю конечную точку graphql:
const express = require('express');
const router = express.Router();
const graphqlHTTP = require('express-graphql');
const gqlOptions = {
schema: require('./schema')
};
router.use('/', graphqlHTTP(gqlOptions));
modules.exports = router;
в основном то, что я хочу, это иметь возможность делать что-то вроде это:
query(`
{
user(id: ${id}) {
name
}
}
`)
как бы я это создал ?
2 ответов
GraphQL.js сам по себе не требует запуска http-сервера. express-graphql - это просто помощник для подключения распознавателя запросов к конечной точке http.
вы можете передать свою схему и запрос в graphql
, он вернет обещание, которое разрешит запрос к данным.
graphql(schema, query).then(result => {
console.log(result);
});
Так:
const {graphql} = require('graphql');
const schema = require('./schema');
function query (str) {
return graphql(schema, str);
}
query(`
{
user(id: ${id}) {
name
}
}
`).then(data => {
console.log(data);
})
Я хотел бы завершить ответ от @aᴍɪʀ, предоставив шаблон для правильного выполнения запроса / мутации с параметрами:
const params = {
username: 'john',
password: 'hello, world!',
userData: {
...
}
}
query(`mutation createUser(
$username: String!,
$password: String!,
$userData: UserInput) {
createUserWithPassword(
username: $username,
password: $password,
userData: $userData) {
id
name {
familyName
givenName
}
}
}`, params)
таким образом, вам не нужно иметь дело с битами Строковой конструкции "
или '
здесь и там.