返回 node-mysql 中 graphql 解析器函数的 mysql 查询
Posted
技术标签:
【中文标题】返回 node-mysql 中 graphql 解析器函数的 mysql 查询【英文标题】:Return mysql query for graphql resolver function in node-mysql 【发布时间】:2017-10-08 04:22:27 【问题描述】:我是 graphql 和 node 的新手,很抱歉,如果这真的很简单,但我正在尝试执行 mysql 查询,以便 graphql 返回查询响应供客户端读取。我遇到的问题是因为 node-mysql 确实是异步查询,所以我无法直接获得查询响应。
经过一番修改,我想通了,新代码:
var root =
login: function(username, password)
var s = `select password from users where username='$username'`;
var result = sql.query(s);
return result.then(response =>
return password == response[0].password
);
这是sql.query
的函数定义
exports.query = function(s, callback)
var promise = new Promise((resolve, reject) =>
con.query(s, function(err, response)
if (err) throw err;
resolve(response);
);
);
return promise;
Graphql 现在返回未定义的响应。
【问题讨论】:
【参考方案1】:我个人使用mysql
,但应该不会有太大区别。
所以我这样做:
exports.getUser = ( id ) =>
return new Promise((resolve, reject) =>
let sql = `select * from users u where u.user_id = ?`;
sql = mysql.format(sql, [id]);
connection.query(sql, (err, results) =>
if (err) reject(err);
resolve(results);
);
);
;
将查询包装在 Promise 周围,当查询完成时它会解析。
然后在解析一个字段时,你只需在 promise 上调用 .then
并做任何你想做的事情。
const viewerType = new GraphQLObjectType(
name: 'Viewer',
fields: () => (
user:
type: userType,
args:
id:
type: GraphQLInt,
,
,
resolve: (rootValue, args) =>
return getUser( id: args.id ).then(value => value[0]);
,
,
),
);
【讨论】:
我更新了我的代码以按照你的方式执行,现在 graphql 显示未定义响应。另外,您定义解析函数的方式与我的方式有区别吗?我的代码中没有GraphQLObjectType
的实例化。
您的.then
未正确返回。应该是.then((response) => password == response[0].password);
是的,刚刚修好了,非常感谢!在旁注中,您定义解析器的方式与我如何定义解析器之间的区别是什么?有关系吗?
嗯,实际上不确定。但我认为不同之处在于您在该领域是硬编码。所以,如果你想在其他地方重用login
,创建一个对象类型是一个很好的方法。但在上述情况下,您只需使用true
和false
在一个地方验证登录,则无需创建新类型。以上是关于返回 node-mysql 中 graphql 解析器函数的 mysql 查询的主要内容,如果未能解决你的问题,请参考以下文章
MySQL查询丢失导致在phpMyAdmin中返回的node-mysql
Nodejs学习笔记--- 与MySQL交互(felixge/node-mysql)
在 node-mysql 中使用 SSH 隧道连接到 MySQL