【发布时间】:2018-10-17 19:36:58
【问题描述】:
我在检索我的突变结果时遇到了挑战。我需要创建一个数据库记录并发送一封电子邮件通知用户注册成功。因为电子邮件的发送和数据库更新都是服务器端的,所以我想在同一个突变中进行。如果电子邮件消息失败,则不得更新数据库。所以我有以下突变:
Mutation: {
createDealer(_, params) {
console.log("params: " + JSON.stringify(params));
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(params.dealer.password, salt, function(err, hash) {
// Store hash in your password DB.
console.log("hashed password " + params.dealer.password)
params.dealer.password = hash;
console.log("hashed password " + params.dealer.password + " Hash: " + hash);
let session = driver.session();
let query = "CREATE (d:Dealer {email:$dealer.email}) SET d += $dealer RETURN d";
let here = "here".link("mymail@example.com");
let messageObj = {
to: params.dealer.email,
subject: 'Dealer Registration',
text: `Thank you for signing up. To complete and activate your registration please click ${here}.`
}
return (sendEmail(messageObj))
.then(data => {
console.log('SendMail data....' + JSON.stringify(data));
return session.run(query, params)
})
.then(result => {
console.log('SendNeo4j data....' + JSON.stringify(result));
return result.records[0].get("d").properties
})
.catch((err) => {
console.log(err);
});
//});
});
}); // genSalt
} // Create Dealer
}, // Mutation
即使认为这两个操作都成功,我似乎也无法检索结果。我得到“未定义”: console.log('SendMail 数据....' + JSON.stringify(data)); 尽管 console.log('SendNeo4j 数据....' + JSON.stringify(result)); 确实显示正确的数据
但 graphiql 为变异返回“null”。 这是 graphiql 突变:
mutation CreateDealer($dealer: DealerInput!) {
createDealer(dealer: $dealer) {
email
name
}
}
当然是 DealerInput 变量。
我已经阅读了在哪里可以从查询/突变中检索多个结果,但我不确定它是如何工作的。在这里,我需要我的 Angular/apollo 前端的 sendEmail 和数据库更新的结果......我会成像 graphiql 对 sendEmail 一无所知,但我希望它返回我请求的属性。
发送电子邮件:
module.exports = (message) =>
new Promise((resolve, reject) => {
const data = {
from: 'mymail@example.com',
to: message.to,
subject: message.subject,
text: message.text
};
mailgun.messages().send(data, (error) => {
if (error) {
return reject(error);
}
return resolve();
});
});
比我有经验的人能帮我吗...谢谢
【问题讨论】:
标签: javascript angular graphql es6-promise apollo