【问题标题】:Node JS, how can I use Squlize.create corectlyNode JS,如何正确使用 Sequelize.create
【发布时间】:2019-09-08 04:50:53
【问题描述】:

我从 1 天前开始尝试解决这个问题。为什么我的异步函数不等待结果?数据已正确插入数据库,但 graphql 在查询完成之前没有得到结果。

const resolvers = {
    register: async (
        parent,
        { contact_name, username, password },
        { models }
    ) => {
        const user = {
            contact_name,
            username,
            password
        };
        const registeredUser = await models.Member.create(user)

        try {
            if (typeof registeredUser.member_key === 'number') {
                return true;
            } else {
                return false;
            }
        } catch (error) {
            throw new Error(error);
        }
    }
    Member: {
        config: (parent, args, { models }) => {
            return models.Config.findAll({
                where: {
                    member_key: parent.member_key
                }
            });
        }
    }
}

如果我在const registeredUser = await models.Member.create(user) 之后console.log 我得到以下返回:

member {
    dataValues:
       { member_key: null,
         contact_name: 'Alex',
         username: 'tornado',
         password:
          '$2b$12$6MKWx.LUXXXaIHHIFUp1DuOMkMNLc76HcvTN6ZayLv.a7iG70O3JK' },
      _previousDataValues:
       { contact_name: 'Alex',
         username: 'tornado',
         password:
          '$2b$12$6MKWx.LUXXXaIHHIFUp1DuOMkMNLc76HcvTN6ZayLv.a7iG70O3JK',
         member_key: null,
         member_type: undefined,
         email_address: undefined },
      _changed:
       { contact_name: false,
         username: false,
         password: false,
         member_key: false,
         member_type: false,
         email_address: false },
      _modelOptions:
       { timestamps: false,
         validate: {},
         freezeTableName: true,
         underscored: false,
         paranoid: false,
         rejectOnEmpty: false,
         whereCollection: null,
         schema: null,
         schemaDelimiter: '',
         defaultScope: {},
         scopes: {},
         indexes: [],
         name: { plural: 'members', singular: 'member' },
         omitNull: false,
         sequelize:
          Sequelize {
            options: [Object],
            config: [Object],
            dialect: [MysqlDialect],
            queryInterface: [QueryInterface],
            models: [Object],
            modelManager: [ModelManager],
            connectionManager: [ConnectionManager],
            importCache: [Object],
            test: [Object] },
         hooks: { beforeCreate: [Array] } },
      _options:
       { isNewRecord: true,
         _schema: null,
         _schemaDelimiter: '',
         attributes: undefined,
         include: undefined,
         raw: undefined,
         silent: undefined },
      isNewRecord: false,
      null: 34490 }

并且在最后一行代码中指定了 member_key 但未在 dataValues 中更新,我肯定做错了,但我不知道是什么。 BTW member_key 是常用的 ID,只自定义反映我的旧数据库:)

问题在于,graphql 查询也给了我一个错误,因为它在我从数据库中取回结果之前就完成了,我认为是因为 await 在这一行上不起作用:

const registeredUser = await models.Member.create(user)

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    我通过返回令牌设法解决了这个问题。因为无论如何我在前端都需要令牌,所以我将 member_key、username 和 contact_name 添加到令牌创建中,所以我将它们放在令牌中。

    这是寄存器突变的修复,其他一些仍然遇到类似的问题

    register: async (
        parent,
        { contact_name, username, password },
        { models, secret }
    ) => {
        const user = {
            contact_name,
            username,
            password
        };
        await models.Member.create(user);
        const member = await models.Member.findOne({
            where: { username }
        });
    
        if (!member) {
            throw new Error('There is a problem with the registration');
        }
        return {
            token: createToken(member, secret, '30m')
        };
    },
    

    还为我添加缺少的字段来创建令牌,它们是 member_key 和联系人姓名,这是修改后的签名令牌

    const createToken = (user, secret, expiresIn) => {
        const { member_key, contact_name, username } = user;
        return jwt.sign({ member_key, contact_name, username }, secret, {
            expiresIn
        });
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      相关资源
      最近更新 更多