Nas*_*tro 5 javascript node.js sequelize.js
我正在Sequelize为我的node.js应用程序使用。我使用findOrCreate()方法创建一个新用户(如果不存在)。根据docs, findOrCreate返回一个数组,其中包含找到或创建的对象,以及一个布尔值,如果创建了新对象,则为true,否则为false。
sequelize建议使用spread()将数组分为2部分并将其作为参数传递给回调函数的方法。第一部分是用户对象,第二部分是布尔值(如果添加了新行)。
我的工作async/await风格。我的代码是:
app.post('/signup', async (req, res) => {
try {
let insertedUser = await User.findOrCreate({
where: { email: req.body.userEmail },
defaults: {
pass: req.body.userPass
}
})
insertedUser.spread((user, created) => {
if(created) {
res.json(user.email)
}
})
} catch (err) {
console.log(`ERROR! => ${err.name}: ${err.message}`)
res.status(500).send(err.message)
}
}
})
Run Code Online (Sandbox Code Playgroud)
发布请求后,我得到一个错误:
ERROR! => TypeError: insertedUser.spread is not a function
Run Code Online (Sandbox Code Playgroud)
为什么会这样,医生说它必须是一个函数?
spread方法在解析值上不存在findOrCreate。您必须spread使用thenofpromise返回的链接findOrCreate。或者您需要findOrCreate直接链接并使用await.
这是更新后的代码await:
app.post('/signup', async (req, res) => {
try {
let created = await User.findOrCreate({
where: { email: req.body.userEmail },
defaults: {
pass: req.body.userPass
}
}).spread((user, created) => {
return created;
})
if(created) {
res.json(user.email)
}
} catch (err) {
console.log(`ERROR! => ${err.name}: ${err.message}`)
res.status(500).send(err.message)
}
}
})
Run Code Online (Sandbox Code Playgroud)