【问题标题】:Unable to get graphql response from server that's running on local无法从本地运行的服务器获取 graphql 响应
【发布时间】:2022-03-10 23:08:41
【问题描述】:

我有一个 mongodb 服务器设置,它在运行以下命令时从端口 3000 开始

npm run start 

我也是一个 graphql 服务器,它在运行以下命令时从端口 4000 开始

npm run start-graphql

我的 package.json 的脚本如下

"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'));

当我通常通过邮递员或 curl 调用其余 api 时,它会按预期返回响应。

例如:http://localhost:3000/images 返回一个对象数组

但是当我想通过 graphql 服务器(在端口 4000 上运行)调用(使用 axios)相同时, 我得到的响应为空。 我不知道为什么会这样。 请检查以下屏幕截图以供参考

注意:为了更清楚,请查看代码库链接 https://github.com/yaswankar/G-photos-backend

任何帮助将不胜感激。

提前致谢

请求:请通过投票来提供帮助,以便更好地传达给那些可以提供帮助的人。

编辑:

新错误截图

【问题讨论】:

  • 您基本上是在问“为什么我的项目不起作用”,这会使问题过于宽泛。你做了什么来调试这个问题?例如,请求是否到达了正确的解析器?
  • 我同意,但那是因为我不知道发生了什么。我试着检查这是否是一个 cors 问题等,但没有运气。网络选项卡中的一切似乎都很好。但它无法达到graphql的解析器功能
  • FWIW,你没有photo 的解析器。
  • 有一个,请查看仓库
  • 我修好了谢谢你的帮助@robertklep

标签: javascript node.js mongodb graphql express-graphql


【解决方案1】:

我能够通过在照片解析器中添加查询块来解决主要问题

Query: {
    photo: photosContext,
  },

另一个错误通过处理响应而不是将原始数据发送到超类来解决

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));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多