Sequelize.js 图形ql+;提供空数据的Sequelize解析器
使用中的技术:Sequelize.js 图形ql+;提供空数据的Sequelize解析器,sequelize.js,graphql-js,apollo-server,Sequelize.js,Graphql Js,Apollo Server,使用中的技术: NodeJS来运行http服务器 ExpressJS框架 用于graphQL的Apollo server express Sequelize可连接到postgres DB 用于存储数据的Postgresql 我正在尝试让graphQL在我的节点服务器上工作。我特别遇到的问题是graphql解析器 我有下面的代码,可以正常工作 let User = require('./server/models').User; let data = User.find({where: {em
- NodeJS来运行http服务器
- ExpressJS框架
- 用于graphQL的Apollo server express
- Sequelize可连接到postgres DB
- 用于存储数据的Postgresql
let User = require('./server/models').User;
let data = User.find({where: {email: "Test@gmail.com"}})
.then(function (foundUser) {
console.log(foundUser.dataValues);
return foundUser.dataValues;
});
const resolvers = {
Query: {
user(root, args){
return data;
}
}
};
当客户端查询graphql端点时:
query Query{
user(email:"literallyanything@cangohereATM.com") {
email
}
}
他们总是得到:
{
"data": {
"user": {
"email": "Test@gmail.com"
}
}
}
这很好!这是预期的行为。按原样,任何参数都可以通过用户(电子邮件:literallyanything@cangohereATM.com)并且结果将是相同的。同样,这是意料之中的
但是,当我移动代码时,数据库中的数据请求会出现在解析器中,如下所示:
const resolvers = {
Query: {
user(root, args){
User.find({where: {email: "Test@gmail.com"}})
.then(function (foundUser) {
console.log(foundUser.dataValues);
return foundUser.dataValues;
});
}
}
};
客户端将始终使用与以前相同的查询从graphql端点获得响应(但是console.log会输出适当的信息):
我怀疑我没有理解apollo server express/graphql工具是如何处理这个承诺的,但我真的不确定如何从这一点向前推进。非常感谢您的帮助 您只需在
用户
之前添加一个返回
,以确保您的承诺被正确链接
const resolvers = {
Query: {
user(root, args){
User.find({where: {email: "Test@gmail.com"}})
.then(function (foundUser) {
return foundUser.dataValues;
});
}
}
};
在以前的代码中(当对模型的调用位于分解器外部时),您返回的是分解器内部的数据。在本例中,data
实际上不是您的数据库查询结果,而是将解析为该查询结果的承诺。在更新后的代码中,您仍然有一个承诺,但不会在解析器函数中返回它。GraphQL将获取返回值并等待它,如果它是一个承诺,或者按原样使用该值——因为您实际上返回了未定义的
,这就是解析程序用于用户
的值的可能重复项
const resolvers = {
Query: {
user(root, args){
User.find({where: {email: "Test@gmail.com"}})
.then(function (foundUser) {
return foundUser.dataValues;
});
}
}
};