Tôi đang sử dụng GraphQL để truy vấn một đối tượng sẽ được tạo thành từ khoảng 15 lệnh REST khác nhau. Đây là truy vấn gốc của tôi mà tôi chuyển vào trong ID từ truy vấn. Điều này làm việc tốt cho đối tượng sinh viên chính giải quyết chính xác. Tuy nhiên, tôi cần tìm ra cách chuyển ID xuống đến trình phân giải địa chỉ. Tôi đã thử thêm args vào đối tượng địa chỉ nhưng tôi nhận được một lỗi chỉ ra rằng args không được truyền xuống từ đối tượng Student. Vì vậy, câu hỏi của tôi là: Làm thế nào để vượt qua các đối số từ truy vấn khách hàng đến các đối tượng phụ trong một máy chủ GraphQL?GraphQL: Làm thế nào để bạn chuyển args tới các đối tượng phụ
let rootQuery = new GraphQLObjectType({
name: 'Query',
description: `The root query`,
fields:() => ({
Student : {
type: Student ,
args: {
id: {
name: 'id',
type: new GraphQLNonNull(GraphQLString)
}
},
resolve: (obj, args, ast) => {
return Resolver(args.id).Student();
}
}
})
});
export default rootQuery;
Đây là đối tượng học sinh chính của tôi mà tôi liên kết các đối tượng khác. Trong trường hợp này tôi đã gắn đối tượng ADDRESS.
import {
GraphQLInt,
GraphQLObjectType,
GraphQLString,
GraphQLNonNull,
GraphQLList
} from 'graphql';
import Resolver from '../../resolver.js'
import iAddressType from './address.js'
let Student = new GraphQLObjectType({
name: 'STUDENT',
fields:() => ({
SCHOOLCODE: { type: GraphQLString },
LASTNAME: { type: GraphQLString },
ACCOUNTID: { type: GraphQLInt },
ALIENIDNUMBER: { type: GraphQLInt },
MIDDLEINITIAL: { type: GraphQLString },
DATELASTCHANGED: { type: GraphQLString },
ENROLLDATE: { type: GraphQLString },
FIRSTNAME: { type: GraphQLString },
DRIVERSLICENSESTATE: { type: GraphQLString },
ENROLLMENTSOURCE: { type: GraphQLString },
ADDRESSES: {
type: new GraphQLList(Address),
resolve(obj, args, ast){
return Resolver(args.id).Address();
}}
})
});
Đây là đối tượng địa chỉ của tôi được giải quyết bằng một cuộc gọi REST thứ hai:
let Address = new GraphQLObjectType({
name: 'ADDRESS',
fields:() => ({
ACTIVE: { type: GraphQLString },
ADDRESS1: { type: GraphQLString },
ADDRESS2: { type: GraphQLString },
ADDRESS3: { type: GraphQLString },
CAMPAIGN: { type: GraphQLString },
CITY: { type: GraphQLString },
STATE: { type: GraphQLString },
STATUS: { type: GraphQLString },
TIMECREATED: { type: GraphQLString },
TYPE: { type: GraphQLString },
ZIP: { type: GraphQLString },
})
});
export default Address;
Đây là resolver tôi
var Resolver = (id) => {
var options = {
hostname: "myhostname",
port: 4000
};
var GetPromise = (options, id, path) => {
return new Promise((resolve, reject) => {
http.get(options, (response) => {
var completeResponse = '';
response.on('data', (chunk) => {
completeResponse += chunk;
});
response.on('end',() => {
parser.parseString(completeResponse, (err, result) => {
let pathElements = path.split('.');
resolve(result[pathElements[0]][pathElements[1]]);
});
});
}).on('error', (e) => { });
});
};
let Student=() => {
options.path = '/Student/' + id;
return GetPromise(options, id, 'GetStudentResult.StudentINFO');
}
let Address=() => {
options.path = '/Address/' + id + '/All';
return GetPromise(options, id, 'getAddressResult.ADDRESS');
};
return {
Student,
Address
};
}
export default Resolver;
FallFast: bạn có tìm thấy giải pháp nào – Brune
Bạn có tìm thấy giải pháp tốt cho điều này không? – James111