javascriptnode.jsmongodbgraphqlexpress-graphql

Unable to get graphql response from server that's running on local


I have a mongodb server setup which on running the below command starts on port 3000

npm run start 

I also a graphql server which on running the below command starts at port 4000

npm run start-graphql

the scripts of my package.json is as below

"scripts": {
    "start": "nodemon server.js",
    "start-graphql": "nodemon graphqlserver.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

server.js

require('dotenv').config();
const express = require('express');
const app = express();
const mongoose = require('mongoose');
mongoose.connect(process.env.DATABASE_URL);
const db = mongoose.connection;


db.on('error', (err) => console.log(err));
db.once('open', () => {
    console.log("Backend Database connected");
});


app.use(express.json({ limit: '2mb'}));

const photosRouter = require('./routes/photos');
app.use('/images', photosRouter)


app.listen(3000, () => {
    console.log('Server started at port 3000');
})

graphqlserver.js

const express = require('express');
const path = require('path');
const express_graphql = require('express-graphql').graphqlHTTP;
const { loadSchemaSync } =  require('@graphql-tools/load');
const { GraphQLFileLoader } = require('@graphql-tools/graphql-file-loader');
const { addResolversToSchema } = require('@graphql-tools/schema');

const getResolvers = require('./graphql/resolvers');

// GraphQL schema
const combinedSchema = loadSchemaSync(
    path.join(__dirname, './graphql/schemas/*.graphql'),
    {
      loaders: [new GraphQLFileLoader()],
    }
  );
const schema = addResolversToSchema({
    schema: combinedSchema,
    resolvers: Object.assign({}, getResolvers())
  });

// Create an express server and a GraphQL endpoint
const app = express();

app.use('/graphql', express_graphql({
    schema: schema,
    graphiql: true
}));
app.listen(4000, () => console.log('Express GraphQL Server Now Running On localhost:4000/graphql'));

when I call the rest api's normally either through postman or curl it returns the response as expected.

For eg: http://localhost:3000/images returns me an array of objects

But When I want to call (using axios) the same via the graphql server (which is running on port 4000 ), I get response as null. I have no clue why this is happening. Please check the below screenshot for your reference enter image description here

Note: For better clarity please check the codebase link https://github.com/yaswankar/G-photos-backend

Any help would be appreciated.

Thanks in advance

Request: Please help by giving an upvote so that it could better reach to those who could help.

Edit:

New Error screenshot enter image description here


Solution

  • I was able to resolve the main issue by adding the query block inside photos resolver

    Query: {
        photo: photosContext,
      },
    

    The other error was resolved by processing the response instead of sending the raw data to the hyper class

    async function getActivePhotos(parent, args, req) {
        try {
            const activePhotos = await photoService.getActivePhotos(req).then(resp => resp.data.map(item => item)); // Process and mapping data
            return activePhotos;
        } catch (error) {
            // logger.error(__filename + ': Failed to get response for getActivePhotos, err=' + JSON.stringify(error));
            return new GraphQLError(JSON.stringify(error));
        }
    }