Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Sequelize关系助手方法在插入后立即返回null_Node.js_Sequelize.js - Fatal编程技术网

Node.js Sequelize关系助手方法在插入后立即返回null

Node.js Sequelize关系助手方法在插入后立即返回null,node.js,sequelize.js,Node.js,Sequelize.js,我目前遇到一个关于sequelize关联的奇怪问题。我定义了以下关系: Recipe.associate = function (models) { Recipe.belongsTo(models.User) } User.associate = function (models) { User.hasMany(models.Recipe) } 只有在使用recipe.findByIdid检索配方时,我才能使用recipe.getUser获取相关模型。但如果我在插入配方后立即

我目前遇到一个关于sequelize关联的奇怪问题。我定义了以下关系:

Recipe.associate = function (models) {
    Recipe.belongsTo(models.User)
}

User.associate = function (models) {
    User.hasMany(models.Recipe)
}
只有在使用recipe.findByIdid检索配方时,我才能使用recipe.getUser获取相关模型。但如果我在插入配方后立即尝试使用以下命令执行recipe.getUser:

const recipe = await Recipe.create({ userId, title, ingredients, direction})
const user = await recipe.getUser()
console.log(user)

这将返回null,我无法理解为什么会是null。

我猜console.loguser是在用户从recipe.getUser获得响应之前执行的

也许可以试试这个:

const recipe = await Recipe.create({ userId, title, ingredients, direction})
const user = await recipe.getUser()
.then(data => {
    console.log(data);
});

我解决了。Seauelize用它的命名约定在下面做了一些魔术。所以在我的例子中,它正在寻找一个UserId,因为我在配方模型中将我的模型定义为User列,其中我已经定义为UserId。因此,我需要做的就是在定义关联时显式指定正确的列:

Recipe.belongsTo(models.User, { foreignKey: 'userId' })

我必须把它放在这里,以防其他人遇到这个问题。

我的假设是,不知道sequelize是什么,当您创建recipe对象时,它不会在当时填充关联的用户。然后,您必须使用创建的配方id来检索配方和所有关联。似乎有一个关于此的日志问题数据库中已经存在一个用户,我正在使用该用户创建配方,因为我正在等待查询,这不应该是问题您是否确认记录正在添加到数据库中?如果在超时中包装console.log语句只是为了测试计时问题,它是否返回预期的结果?是的,记录插入到数据库中。我还没有尝试TimeOut,我已经尝试过了。请在插入中捕获以查看是否有任何错误,但没有错误。