sql - Graphql、node.js 和 sql,不能为不可为空的字段返回 null
问题描述
我想将来自 db 的数据返回到 api。正在记录数据,但未显示在 graphql api 上。
const express = require('express');
const bodyParser = require('body-parser');
const graphqlHttp = require('express-graphql');
const { buildSchema } = require('graphql');
var mysql = require('mysql');
const app = express();
//start mysql connection
var connection = mysql.createConnection({
host : 'localhost', //mysql database host name
user : 'root', //mysql database user name
password : '', //mysql database password
database : 'test' //mysql database name
});
connection.connect(function(err) {
if (err) throw err
})
//end mysql connection
app.use(bodyParser.json());
app.use(
'/graphql',
graphqlHttp({
schema: buildSchema(`
type users {
id: String!
username: String!
password: String!
role: String!
name: String!
photo: String!
}
type RootQuery {
getUsers: [users!]!
}
type RootMutation {
createUsers(name: String): String
}
schema {
query: RootQuery
mutation: RootMutation
}
`),
rootValue: {
getUsers: () => {
connection.query('select * from users', function (error, results, fields) {
if (error) throw error;
console.log(JSON.stringify(results))
return JSON.stringify(results) ;
});
},
createUsers: (args) => {
const eventName = args.name;
return eventName;
}
},
graphiql: true
})
);
app.listen(3000);
结果:
query
{
getUsers {
id
}
}
输出:
{
"errors": [
{
"message": "Cannot return null for non-nullable field RootQuery.getUsers.",
"locations": [
{
"line": 3,
"column": 3
}
],
"path": [
"getUsers"
]
}
],
"data": null
}
解决方案
getUsers: () => {
/* return */ connection.query('select * from users', function (error, results, fields) {
if (error) throw error;
//users = results;
console.log(JSON.stringify(results));
return JSON.stringify(results) ;
});
},
您的getUsers
函数不返回任何内容。我相信您错过了我在上述评论中强调的退货声明。
顺便说一句,确保所有根字段(例如getUsers
)都可以为空是 GraphQL 中的最佳实践,请阅读本文以了解原因。
推荐阅读
- ruby-on-rails - jstree 和 Rails 资产管道
- php - 更新在控制台中读取成功,但数据库不受影响
- java - 如何使用不同的值查找和替换所有转义引号和常规引号?
- excel - 如果第一次没有工作,使用错误处理程序让用户尝试再次提交表单
- python - 有没有一种在目录中递归的有效方法?
- java - 创建索引请求映射在弹性搜索中失败
- git-bash - 错误:无法打开需求文件:[Errno 2] 没有这样的文件或目录:'requirements.txt' - GitBash Windows 10
- android - 自定义文本输入布局
- python - 使用re在python中不区分大小写替换
- javascript - 在 Python 和 JavaScript 之间传递图像数据