在node-mysql中返回graphql解析器函数的mysql查询

时间:2017-05-09 18:02:49

标签: javascript mysql node.js graphql

我是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 个答案:

答案 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]);
      },
    },
  }),
});