[英]GraphQL error update mutation “Resolve function for \”User.id\“ returned undefined”
我是GraphQL的新手,正在嘗試編寫更新突變。 但是,盡管實際上已更新數據庫,但是我正在收到\\“ User.id \\”返回未定義“錯誤的解析函數。
我究竟做錯了什么?
userSchema.js:
import Sequelize from 'sequelize'; import SqlHelper from '../helpers/sqlhelper'; const config = require('../../config'); const sequelizer = new SqlHelper(config).Init(); const createUser = sequelizer.define( 'createUser', { ... } ); const updateUser = sequelizer.define( 'updateUser', { id: { type: Sequelize.UUID, field: 'Id', primaryKey: true, defaultValue: Sequelize.UUIDV4, }, username: { type: Sequelize.STRING, field: 'Username', allowNull: true, }, email: { type: Sequelize.STRING, field: 'Email', allowNull: true, }, firstname: { type: Sequelize.STRING, field: 'FirstName', allowNull: true, }, lastname: { type: Sequelize.STRING, field: 'LastName', allowNull: true, }, .... }, { // define the table's name tableName: 'Users', }, ); module.exports = User;
UserResolver.js:
import User from '../dbschemas/user'; import Sequelize from 'sequelize'; const Op = Sequelize.Op; export default { Mutation: { createUser: async (obj, args) => (await User.create(args)), updateUser: async (obj, args) => (await User.update(args, { where: { id: args.id, }, returning: true })) } };
盡管從GraphiQL調用updateUser會更新記錄(以db為單位),但會導致“為\\“ User.id \\”返回未定義的解析函數”錯誤:
mutation{ updateUser(id: "2ecd38ca-cf12-4e79-ac93-e922f24af9e3", username: "newUserTesting", email: "testemail@yahoo.com", lastname: "TestUserLName", firstname: "fname1") { id } }
{ "data": null, "errors": [ { "message": "Resolve function for \\"User.id\\" returned undefined", "locations": [ { "line": 16, "column": 4 } ], "path": [ "updateUser", "id" ] } ] }
問題很明顯,您的解析器不會返回包含id
的對象。 文檔說Model.update
返回一個數組,其中第二個元素是受影響的行。 因此,您的解析器應如下所示:
async updateUser(obj, args) {
const resultArray = await User.update( ... )
return resultArray[1]
}
...被您需要的東西所取代。
因此,顯然,更新不會為MSSQL返回受影響的行,而僅返回受影響的記錄數。
這僅適用於postgres返回時:true:
public static update(values: Object, options: Object): Promise<Array<affectedCount, affectedRows>>
設置返回值:true(對於MSSQL)返回undefined(並且數組中的參數順序甚至沒有正確的順序……即,首先是受影響的行->未定義,然后是受影響的計數->受影響的行數。)
要找回對象,您需要執行以下操作:
Mutation: {
createUser: async (obj, args) =>
(await User.create(args.user)),
updateUser: async (obj, args, context, info) =>{
let user = args.user;
let response = await User.update(user,
{
where: {
[Op.or]: [{ email: user.email }, { id: user.id }, { username: user.username }, { lastname: user.lastname}]
},
//returning: true //not working... only for postgres db :(
}).then(ret => {
console.log('ret', ret);
return ret[0];
}).catch(error => {
console.log('error', error)
});
if (response > 0) return user; //return record
//return response > 0; //return true
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.