这是我的第一个问题,我最近刚开始编写Node JS代码。现在我使用NodeJS和EJS作为我的应用程序的模板引擎。我的数据库是DynamoDB,我想通过使用AWS Appsync将表格变为Realtime。使用Appsync,我可以查询和改变我的表中的字段,但我似乎无法订阅任何突变。当我打电话给我的订阅时,也没有打开任何MQTT websockets。
我尝试在Appsync文档上关注Appsync订阅的示例,但它似乎不起作用。
注意:我已经定义了我的infoID变量,在模式中创建了类型信息{},并且mutate和query都有效。它只是订阅不起作用,并且在模板上没有创建MQTT websocket(甚至可以使用NodeJS和EJS吗?)。
我的架构如下:
type Mutation {
deleteInfo(infoID: String!): information
}
type Subscription {
onDeleteInfo(infoID: String): information
@aws_subscribe(mutations: ["deleteInfo"])
}
我用来查询和订阅的代码是这样的:
const query = gql(`
query($infoID: String!){
getInformation(infoID: $infoID) {
infoID
noOfDays
noOfItems
infoName
}
}`);
// Set up a subscription query
const subquery = gql(`
subscription ($infoID: String) {
onDeleteInfo(infoID: $infoID) {
infoID
noOfDays
noOfItems
infoName
}
}`);
const client = new AWSAppSyncClient({
url: url,
region: region,
auth: {
type: type,
credentials: credentials,
}
});
client.hydrated().then(function (client) {
//Now run a query
client.query({ query: query, variables: {infoID : infoID} })
.then(function logData(data) {
console.log('results of query: ', data);
var responseData = data;
res.send(responseData);
})
.catch(console.error);
//Now subscribe to results
const realtimeResults = function realtimeResults(data) {
console.log('realtime data: ', data);
console.log('subcribe is called');
};
const observable = client.subscribe({
query: subquery,
variables: {infoID : infoID} });
observable.subscribe({
next: realtimeResults,
complete: console.log,
error: console.log
});
};
我的变异代码是:
const mutation = gql(`
mutation($infoID: String!){
deleteInfo(infoID: $infoID) {
infoID
noOfDays
noOfItems
infoName
}
}`);
const client = new AWSAppSyncClient({
url: url,
region: region,
auth: {
type: type,
credentials: credentials,
}
});
client.hydrated().then(function (client) {
//Now run a query
client.mutate({ mutation: mutation, variables:{infoID: infoID} })
.then(function logData(data) {
console.log('results of mutate: ', data);
})
.catch(console.error);
});
感谢任何以任何方式回答或阅读或帮助的人!
答案 0 :(得分:2)
如果您可以通过应用程序进行突变和查询,听起来您已成功连接到AppSync。要调试订阅问题,您需要查看请求的网络响应。如果设置不正确,该服务将发送错误消息。
要检查的一个常见问题是您的架构中是否定义了subscription
。
schema {
query: Query
mutation: Mutation
subscription: Subscription
}
如果是这种情况,您在发出订阅请求时收到的错误消息是:Schema is not configured for subscriptions.
答案 1 :(得分:0)
以下是如何调用订阅的示例代码片段:
// Set up a subscription query
const subquery = gql`
subscription onAccept {
onUpdateDeveloperJob(developerId: "ce261427-84ad-450b-91d1-83b78532dfe6") {
id
jobId
developerId
selected
}
}
`;
// Set up Apollo client
const client = new AWSAppSyncClient({
url,
region,
auth: {
type,
apiKey
}
});
client
.hydrated()
.then(appsyncClient => {
// Now run a query
// appsyncClient
// .query({ query })
// .then(data => {
// console.log('results of query: ', data);
// })
// .catch(console.error);
// Now subscribe to results
const observable = appsyncClient.subscribe({ query: subquery });
const realtimeResults = function realtimeResults(data) {
console.log('realtime data: ', data);
};
observable.subscribe({
next: realtimeResults,
complete: console.log,
error: console.log
});
})
.catch(console.error);
希望这对您有所帮助。