我是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现在返回未定义的响应。
答案 0 :(得分:3)
我个人使用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包装查询,该查询在查询完成时解析。
然后在一个字段的决心中,你只需在承诺上调用.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]);
},
},
}),
});