Node JS,我该如何正确使用Sequelize.create

问题描述 投票:0回答:1

我试着从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
                }
            });
        }
    }
}

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

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查询也给了我一个错误,因为它在我可以从db返回结果之前完成,我假设因为await不能在这一行上工作:

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

node.js sequelize.js
1个回答
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
    });
};
© www.soinside.com 2019 - 2024. All rights reserved.