I'm using a Sequelize
for my node.js
app. I use findOrCreate()
method to create a new user if not exist. Accordingly to docs findOrCreate
returns an array containing the object that was found or created and a boolean that will be true if a new object was created and false if not.
The sequelize recommend to use spread()
method which divides the array into its 2 parts and passes them as arguments to the callback function. First part is a user object and second is boolean if new row was added.
I work in async/await
style. My code is:
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)
}
}
})
After post request I get an error:
ERROR! => TypeError: insertedUser.spread is not a function
Why is that, the doc says it must be a function?
sequelize. query('CALL calculateFees();'). success( function (settingName1, settingName2, settingName3, users) { });
The sequelize recommend to use spread() method which divides the array into its 2 parts and passes them as arguments to the callback function. First part is a user object and second is boolean if new row was added.
There are no builtin methods for managing views in Sequelize, but you can create them using plain SQL queries and manage them with normal Sequelize models.
spread
method does not exist on resolved value from findOrCreate
. You have to either chain spread
with then
of promise
returned by findOrCreate
. Or you need to chain with findOrCreate
directly and use await
.
Here is the updated code with 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)
}
}
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With