Search code examples
javascriptnode.jsknex.js

My database gets an object returned instead of a value


I am doing a post request on my database for user registers & every time the email gets returned as an object with this {"email":"[email protected]"} instead of this [email protected]

This is the nodejs

app.post("/register", (req, res) => {
  const { email, name, password } = req.body;
  var salt = bcrypt.genSaltSync(10);
  var hash = bcrypt.hashSync(password, salt);
  knex
    .transaction((trx) => {
      trx
        .insert({
          hash: hash,
          email: email,
        })
        .into("login")
        .returning("email")
        .then((loginEmail) => {
          return trx("users")
            .returning("*")
            .insert({
              email: loginEmail[0],
              name: name,
              joined: new Date(),
            })
            .then((user) => {
              res.json(user[0]);
            });
        })
        .then(trx.commit)
        .catch(trx.rollback);
    })
    .catch((err) => res.status(400).json("E-mail is already in use"));
});

This is how it looks in my 1st database

 14 | Karl      | {"email":"[email protected]"}         |       0 | 2022-01-18 04:02:03.643

This is how it looks in my 2nd database

 12 | $2a$10$WsbEExtpu14ps7aK6AYbxOknedUaLusApL8MlD8lv0lCtknBIuPE. | [email protected]

Solution

  • loginEmail is an array of results, and each row is an object. You need to get the email property from that object.

                .insert({
                  email: loginEmail[0].email,
                  name: name,
                  joined: new Date(),
                })