0

I looked for this question everywhere but, I haven't found it. I'm using Sequelize for Postgres, and I'm trying to add content to a model. It's not throwing any errors, except just a warning that says that string based operations have been deprecated, but this isn't an operation.

sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators

Here's my model and .create code

const Sequelize = require('sequelize');
const sequelizeInstance = new Sequelize('journal_entries', 'KupidoExportLLC', 
{
  dialect: 'postgres'
});



module.exports = function(sequelizeInstance, DataTypes){
const Entries = sequelizeInstance.define('entries', {
  user: Sequelize.STRING,
  title: Sequelize.STRING,
  content: Sequelize.TEXT
})

Entries.sync().then(function(){
  Entries.create({
    user: 'I need to get this to work',
    title: 'Ill be really happy when this does work',
    content: 'It will work this time'
  })
});



return Entries;

}

Here's what my commandline is showing

sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators node_modules/sequelize/lib/sequelize.js:242:13

When I go look at my table, it's empty

journal_entries=# SELECT * FROM entries;
 id | user | title | content | createdAt | updatedAt
----+------+-------+---------+-----------+-----------
(0 rows)

I have no idea what else it could be

1
  • Did the answer below help? It should be accepted from what I can tell Commented Mar 3, 2018 at 23:25

2 Answers 2

3

You need to turn off the warnings.

In your config.JSON file or (If you have initialize the connection in the same file) Turn the warning off, as given:

IN Config.JSON

{
  "development": {
    "username": "root",
    "password": "12345",
    "database": "fasttrack",
    "host": "localhost",
    "dialect": "mysql",
    "define": {
      "timestamps": false
  },
  "operatorsAliases": false
  },
  "test": {
    "username": "root",
    "password": "12345",
    "database": "fasttrack",
    "host": "localhost",
    "dialect": "mysql",
    "define": {
      "timestamps": false
  },
  "operatorsAliases": false
  },
  "production": {
    "username": "root",
    "password": "12345",
    "database": "fasttrack",
    "host": "localhost",
    "dialect": "mysql",
    "define": {
      "timestamps": false
  },
  "operatorsAliases": false
  }
}

Inline declaration of connection

const sequelize = new Sequelize(config.database, config.username, config.password, { host: config.host, dialect: config.dialect, pool: { max: 5, min: 0, idle: 10000 }, logging: false, freezeTableName: true, operatorsAliases: false });

Sign up to request clarification or add additional context in comments.

Comments

1

you are working with Promises here, you have either to await or return them. if you have async await available in your node version you could just do:

module.exports = async function(sequelizeInstance, DataTypes){

  const Entries = sequelizeInstance.define('entries', {
    user: Sequelize.STRING,
    title: Sequelize.STRING,
    content: Sequelize.TEXT
  });

  await sequelizeInstance.sync();
  await Entries.create({
    user: 'I need to get this to work',
    title: 'Ill be really happy when this does work',
    content: 'It will work this time'
  });

  const entries = await Entries.findAll();
  console.log(entries.map(e => e.get({ plain: true })));
  return Entries;
};

or if not

module.exports = async function(sequelizeInstance, DataTypes){

  const Entries = sequelizeInstance.define('entries', {
    user: Sequelize.STRING,
    title: Sequelize.STRING,
    content: Sequelize.TEXT
  });

  return sequelizeInstance.sync().then(() => {

    return Entries.create({
      user: 'I need to get this to work',
      title: 'Ill be really happy when this does work',
      content: 'It will work this time'
    });
  })
  .then(() => {
    return Entries.findAll().then(entries => {
      console.log(entries.map(e => e.get({ plain: true })));
      return entries;
    })
  });
};

1 Comment

It definitely helped, thank you so much! It turns out that issue wasn't the deprecated string message at all

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.