gpt4 book ai didi

node.js - Node JS,如何正确使用 Sequelize.create

转载 作者:行者123 更新时间:2023-12-03 22:26:55 29 4
gpt4 key购买 nike

我试图从 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 中更新,我肯定做错了什么,但我不知道是什么。
顺便说一句, member_key 是通常的 ID,仅自定义以反射(reflect)我的旧数据库 :)

问题在于,graphql 查询也给了我一个错误,因为它在我可以从数据库取回结果之前就已经完成了,我假设是因为 await 不在这条线上工作:

constregisteredUser = await models.Member.create(user)

最佳答案

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

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

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')
};
},

还将缺失的字段添加到我的 token 创建中,它们是 member_key 和联系人姓名,这是修改后的签名 token
const createToken = (user, secret, expiresIn) => {
const { member_key, contact_name, username } = user;
return jwt.sign({ member_key, contact_name, username }, secret, {
expiresIn
});
};

关于node.js - Node JS,如何正确使用 Sequelize.create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736048/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com