Mac*_*ion 1 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
});
}
Run Code Online (Sandbox Code Playgroud)
下面是函数定义 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;
Run Code Online (Sandbox Code Playgroud)
Graphql 现在返回未定义响应。
小智 5
我个人使用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);
});
});
};
Run Code Online (Sandbox Code Playgroud)
将查询包裹在 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]);
},
},
}),
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |