在 graphql 中解析 psql 返回的数据
Resolve data returned from psql in graphql
我正在尝试将 graphQL 添加到我现有的应用程序中。
我目前使用 psql 数据库调用支持 Express 端点。
我的目标是使用 psql 访问我的数据,然后在我的 graphQL 'resolves'.
中使用这些查询的结果
这是我的 psql 数据库调用示例:
'use strict';
const config = require('../../config');
const PostgresDAO = require('core/src/server/db/dao/postgres');
const postgresRW = new PostgresDAO(config.postgresRW);
function getById(id) {
postgresRW.queryOne(
`
SELECT id, email, create_date
FROM gamesDB.players
WHERE id = ;
`,
[id],
function(err, result) {
console.log(result);
return result;
}
);
}
module.exports = {
getById: getById
}
这是我的 graphQL 模式:
'use strict';
const graphql = require('graphql');
const Player = require('./types/player');
const db = require('../db');
const RootQueryType = new graphql.GraphQLObjectType({
name: 'RootQueryType',
fields: {
player: {
type: Player,
description: 'The current player identified by an ID.',
args: {
key: {
type: new graphql.GraphQLNonNull(graphql.GraphQLString)
}
},
resolve: (obj, args) => {
return db.players.getById(args.key);
}
}
}
});
const testSchema = new graphql.GraphQLSchema({
query: RootQueryType
});
module.exports = testSchema;
问题似乎出在我的决心上,因为每次我从 graphiql 界面中查询玩家时,我都会看到正确的玩家信息正确地记录在我的服务器上,但 graphiql 界面中的结果是 null
.
知道我在这里做错了什么吗?
您需要做出 Player.getById return 包含回调结果的承诺。
很有可能(完全未经测试的代码):
function getById(id) {
return new Promise(function(resolve, reject) {
postgresRW.queryOne(
`
SELECT id, email, create_date
FROM gamesDB.players
WHERE id = ;
`,
[id],
function(err, result) {
if (err) reject(err);
else resolve(result);
}
);
});
}
我正在尝试将 graphQL 添加到我现有的应用程序中。 我目前使用 psql 数据库调用支持 Express 端点。 我的目标是使用 psql 访问我的数据,然后在我的 graphQL 'resolves'.
中使用这些查询的结果这是我的 psql 数据库调用示例:
'use strict';
const config = require('../../config');
const PostgresDAO = require('core/src/server/db/dao/postgres');
const postgresRW = new PostgresDAO(config.postgresRW);
function getById(id) {
postgresRW.queryOne(
`
SELECT id, email, create_date
FROM gamesDB.players
WHERE id = ;
`,
[id],
function(err, result) {
console.log(result);
return result;
}
);
}
module.exports = {
getById: getById
}
这是我的 graphQL 模式:
'use strict';
const graphql = require('graphql');
const Player = require('./types/player');
const db = require('../db');
const RootQueryType = new graphql.GraphQLObjectType({
name: 'RootQueryType',
fields: {
player: {
type: Player,
description: 'The current player identified by an ID.',
args: {
key: {
type: new graphql.GraphQLNonNull(graphql.GraphQLString)
}
},
resolve: (obj, args) => {
return db.players.getById(args.key);
}
}
}
});
const testSchema = new graphql.GraphQLSchema({
query: RootQueryType
});
module.exports = testSchema;
问题似乎出在我的决心上,因为每次我从 graphiql 界面中查询玩家时,我都会看到正确的玩家信息正确地记录在我的服务器上,但 graphiql 界面中的结果是 null
.
知道我在这里做错了什么吗?
您需要做出 Player.getById return 包含回调结果的承诺。
很有可能(完全未经测试的代码):
function getById(id) {
return new Promise(function(resolve, reject) {
postgresRW.queryOne(
`
SELECT id, email, create_date
FROM gamesDB.players
WHERE id = ;
`,
[id],
function(err, result) {
if (err) reject(err);
else resolve(result);
}
);
});
}