[英]Fetching data from MySQL to GraphQL using Sequelize failed
首先,这是我的MySQL表
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| MemberID | int(11) | NO | PRI | NULL | auto_increment |
| FirstName | varchar(50) | NO | | NULL | |
| LastName | varchar(50) | NO | | NULL | |
| CityID | int(11) | NO | MUL | NULL | |
+-----------+-------------+------+-----+---------+----------------+
我使用Sequelize创建了从我的Node JS服务器到MySQL的连接,如下所示:
var db = new Sequelize(
'member','root', null,
{
host : 'localhost',
port : 3306,
dialect : 'mysql'
}
);
然后我使用Sequelize在我的Node JS服务器上定义了我的MySQL表,如下所示:
var memberlist = db.define('members', {
MemberID : Sequelize.INTEGER,
FirstName : Sequelize.STRING,
LastName : Sequelize.STRING
});
然后我创建了一个GraphQL Schema来获取数据以及模式的相应解析器
var schema = buildSchema(`
type Members {
MemberID: ID!
FirstName: String!
LastName: String!
CityID: City!
}
type City {
CityID: ID!
CityName: String!
}
type Query {
allMembers: [Members]!
}
`);
var root = {
allMembers : function(){
memberlist.find({}).complete(function (err,data)
{}).then(({data}) => data)},
}
var app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true
}));
当我尝试在GraphQL上运行查询时,出现以下错误:
Executing (default): SELECT `id`, `MemberID`, `FirstName`, `LastName`,
`createdAt`, `updatedAt` FROM `members` AS `members` LIMIT 1;
Unhandled rejection SequelizeDatabaseError: Unknown column 'id' in 'field
list'
id
(和createdAt
, updateAt
)字段来自哪里,因为我没有在Sequelize上定义它们?
我在这里假设,如果你没有明确告诉sequelize主键在你的模型中是什么,它将假设它是一个名为id
的字段
请尝试以下方法告诉你的主键是什么;
const memberlist = db.define('members', {
MemberID : {
type: DataTypes.INTEGER,
primaryKey: true,
}
FirstName : Sequelize.STRING,
LastName : Sequelize.STRING
});
为您自动添加createdAt和updatedAt字段。 要阻止这种情况的发生
const memberlist = db.define('members', {
MemberID : {
type: DataTypes.INTEGER,
primaryKey: true,
}
FirstName : Sequelize.STRING,
LastName : Sequelize.STRING
}, {
timestamps: false
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.