Oxibital
Oxibital

Reputation: 143

Objection.js - insert data based on "where" condition

I want to insert a data into my database based on "where" condition, but I couldn't success.

Objection.js :

const User = require('../../database/models/user');

router.route('/register')
.get((req,res,next)=>{
    res.render('user/register')
})
.post((req,res,next)=>{
    const {email, password} = req.body;
    const user = User.query().where('email', '=', email);
    
    if(user){
       console.log('user exists');
       // do something
    }
    if(!user){
       console.log('user doesnt exist');
       // do something
    }
})

In any case, it prints "user exists". I think its because "user" returns a promise.

I tried also this :

const User = require('../../database/models/user');

router.route('/register')
.get((req,res,next)=>{
    res.render('user/register')
})
.post((req,res,next)=>{
    const {email, password} = req.body;
    User.query().where('email', '=', email).then(row => {
        if(row.length == 1){
            console.log('user exists');
        }
        if(row.length == 0){
            User.query().insert({
                email : email,
                password : password
            })
        }
    });
})

But it doesn't insert the data to the database. I don't know how can i insert data into my database based on a condition. Do you know how can i fix it? Thank you!

Upvotes: -1

Views: 1249

Answers (1)

Mikael Lepistö
Mikael Lepistö

Reputation: 19718

You are missing .then or await from the insert query

This should work:

const User = require('../../database/models/user');

router.route('/register')
.get((req,res,next)=>{
    res.render('user/register')
})
.post((req,res,next)=>{
    const {email, password} = req.body;
    User.query().where('email', '=', email).then(row => {
        if(row.length == 1){
            console.log('user exists');
        }
        if(row.length == 0){
            User.query().insert({
                email : email,
                password : password
            }).then(result => {
              res.status(204).send();
            })
        }
    });
})

Upvotes: 2

Related Questions