2017-05-09 64 views
0

我是新來的graphql和節點,所以很抱歉,如果這真的很簡單,但我想執行一個mysql查詢,以便查詢響應由graphql返回客戶端讀取。我遇到的問題是,因爲node-mysql不會異步查詢,所以我無法直接獲取查詢響應。在node-mysql中返回mysql查詢graphql解析器函數

一些修修補補之後我想通了,新的代碼:

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); 
    }); 
    }); 
}; 

線上纏繞承諾,當查詢完成它解決了查詢。

然後在一個領域的決心,你只需撥打.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]); 
     }, 
    }, 
    }), 
}); 
+0

我更新了我的代碼,以執行它如何做,現在graphql顯示沒有定義響應。另外,你是如何定義解析函數與我如何做的區別?我沒有在我的代碼中的任何地方實例化'GraphQLObjectType'。 – MacStation

+1

你的'.then'沒有回到正確的位置。它應該可能是'.then((response)=> password == response [0] .password);' – wednesdaymiko

+0

是的,只是修好了,非常感謝!在旁註中,你如何定義解析器和我是如何做到的?有關係嗎? – MacStation