簡體   English   中英

GraphQL錯誤更新變異“ \\” User.id \\”的解析函數返回未定義”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM