【发布时间】:2019-10-25 13:10:39
【问题描述】:
我知道这是一个比较常见的问题,但我的实现与其他帖子不同。我正在使用我无法工作的最基本的实现。我使用 Sequelize 和 MySQL 作为数据库实现。
解析器.js
const resolvers = {
Query: {
async getStudent (root, { id }, { models }) {
return models.User.findByPk(id)
},
},
Mutation: {
async createUser (root, { name, email }, { models }) {
return models.User.create({
name,
email
})
},
},
}
schema.js
const { gql } = require('apollo-server-express');
const typeDefs = gql`
type User {
id: Int!
name: String!
email: String!
}
type Query {
getUser(id: Int!): User
getAllUsers: [User!]!
}
type Mutation {
createUser(name: String!, email: String!): User!
}`
module.exports = typeDefs;
用户模型
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
name: DataTypes.STRING,
email: DataTypes.STRING
}, {});
User.associate = function(models) {
// associations can be defined here
};
return User;
};
当运行以下突变时:
mutation{ createUser(name:"Nate", email:"nate@test.com"){ 编号 } }
我收到:
“错误”:[ { "message": "不能为不可为空的字段 Mutation.createUser 返回 null。", “地点”:[ { “线”:2, “列”:3 } ], “小路”: [ “创建用户” ],
【问题讨论】:
-
同样的斗争。很难找出解决方案。
-
在我的例子中,我没有在模型创建之前包含 await,例如:return await models.User.create({name,email})
-
你为什么使用突变而不是查询?
-
因为创建用户是一种变异(数据正在变异)而不是查询。
标签: node.js graphql sequelize.js apollo-server