Задать вопрос

Подключить graphql с Sequelize в node.js?

вот так создал сервер

const express =require('express');
const  app = express();
const config = require('./config');
const models = require("./models");
const routes = require('./routers/router');
const graphqlHTTP = require('express-graphql');
const cors = require('cors');
const schema = require('./schema/schema');

app.use(cors());

app.use('/graphql',graphqlHTTP({
    schema,
    graphiql:true
}));

app.listen(3015,err=>{
    err ? console.log(error) : console.log('Server started')
});

вот сама схема
const graphql = require('graphql');
const categoryController= require('../controllers/categoryController');
const goodsController = require('../controllers/goodsController');
const GraphQLDate = require('graphql-date')
const { GraphQLObjectType, GraphQLString, GraphQLSchema, GraphQLID, GraphQLInt,GraphQLList,GraphQLNonNull,GraphQLBoolean} = graphql;

const CategoryType=new GraphQLObjectType({
    name:'Category',
    fields:()=>({
        id:{type:GraphQLID},
        name:{type: new GraphQLNonNull(GraphQLString)},
        description:{type: new GraphQLNonNull(GraphQLString)},
        goods:{
            type:GoodsType,
            resolve({id},args){
                return goodsController.goodsCategory({id:id},(err,goods)=>{
                    return goods
                })
            }
        }
    }),
});

const GoodsType = new GraphQLObjectType({
    name: 'Goods',
    fields: () => ({
        id: {type: GraphQLID},
        name: {type: new GraphQLNonNull(GraphQLString)},
        description: {type: new GraphQLNonNull(GraphQLString)},
        category: {
            type: CategoryType,
            resolve({category_id}, args) {
                return categoryController.singleCategory({id:category_id},(err,category)=>{
                   return category;
                });
            }
        }
    })
});

const Query = new GraphQLObjectType({
    name:'Query',
    fields:{
        oneGoods:{
            type:GoodsType,
            args:{id:{type:GraphQLID}},
            resolve(parent,args){
                return goodsController.goodsOne({id:id});
            }
        },
        category:{
            type:CategoryType,
            args:{id:{type:GraphQLID}},
            resolve(parent,{id}){
                return categoryController.singleCategory({id:id});
            }
        },
        categories:{
            type:CategoryType,
            resolve(parent,args){
                return categoryController.graphQLCategories()
            }
        }
    }
});

module.exports = new GraphQLSchema({
    query: Query,
});

вот такой контроллер
const models= require('../models');
const Category= models.category;
const Goods= models.goods;

exports.graphQLCategories=(req,res)=>{
    try{
        cat=  Category.findAll({include:[Goods]}).then( async (categories)=>{
            console.log(1,categories)
            return categories;
        });
        console.log(2, cat);
        return cat;
    }catch (e) {
        throw console.log(e);
    }
};

но порядок вывода следующий вначале отрабатывает в console.log(2,cat)
потом идет запрос в бд, a потом console.log(1,categories).
Почему так делается я понимаю я не понимаю как сделать правильно. Что бы передать заполненные данные.
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы