Sequelize 已弃用的错误消息

Posted

技术标签:

【中文标题】Sequelize 已弃用的错误消息【英文标题】:Sequelize Deprecated Error Message 【发布时间】:2018-03-18 09:59:16 【问题描述】:

我对 Node 非常陌生,我正在了解 ORM 和 Sequelize 的工作原理。我一直在 Sequelize 网站上复制连接字符串并对其进行更改以与我的数据库一起使用。当我执行该文件时,似乎可以在我的数据库中创建表,但是我收到错误“基于字符串的运算符现在已弃用。请使用基于符号的运算符以获得更好的安全性 ....node_modules/sequelize/lib/sequelize。 js:236:13" 我理解为什么运算符已被弃用,但是由于我已将其作为新软件包安装并使用文档中的连接字符串,因此避免使用任何非法运算符我是否正确假设此错误消息是仅供参考,并未反映在我刚刚使用的代码中。

我包含了我的 for app 文件,该文件引发了错误,是密码可能导致此错误。

const express = require('express');
const app = express();

const Sequelize = require('sequelize');

const db = new Sequelize('myDBName', 'mYuSeRnAmE', 'mYpAsSw!ORd$', 
host: 'mysqlserverName',
  dialect: 'mssql',

  pool: 
    max: 5,
    min: 0,
    idle: 10000
  ,

);


var Article = db.define('Article', 
    title: Sequelize.STRING,
    body: Sequelize.TEXT
);

db.sync();

module.exports = app;

**** 编辑****

我已经想通了,我会留下这个答案,以防其他人遇到问题。您需要包含 operatorAliases: false 以消除连接中的错误消息。

【问题讨论】:

您应该在下面写一个实际答案,而不是将您的解决方案编辑到您的问题中。否则,用户可能会浏览您的编辑而看不到它。考虑到 user3139574 的答案是相同的,甚至可能只是接受并赞成将其作为正确答案。 【参考方案1】:

这些是我发现的弃用警告的最佳解释:

https://github.com/sequelize/sequelize/issues/8417

http://docs.sequelizejs.com/manual/tutorial/querying.html#operators-aliases

添加“operatorsAliases: false”确实覆盖了我的应用程序中的警告消息。

const Sequelize = require('sequelize')
const sequelize = new Sequelize(
  DB_NAME,
  USERNAME, 
  PASSWORD,
  
    host: HOSTNAME,
    dialect: 'mysql',
    logging: false,
    freezeTableName: true,
    operatorsAliases: false
  
)

注意:从 sequelize@4.20.1 开始,我开始收到来自 Sequelize 的“无效值”错误。我让步并使用以下代码来启用符号运算符:

const Sequelize = require('sequelize')
const Op = Sequelize.Op
const sequelize = new Sequelize(
  DB_NAME,
  USERNAME, 
  PASSWORD,
  
    host: HOSTNAME,
    dialect: 'mysql',
    logging: false,
    freezeTableName: true,
    operatorsAliases: 
      $and: Op.and,
      $or: Op.or,
      $eq: Op.eq,
      $gt: Op.gt,
      $lt: Op.lt,
      $lte: Op.lte,
      $like: Op.like
    
  
)

【讨论】:

BartusZak 是正确的。从版本 5 开始,operatorAliases 将引发警告:“DeprecationWarning:不推荐使用基于字符串的操作符。请使用基于符号的操作符以获得更好的安全性...”当您从选项中删除 operatorAliases 时,警告就会消失。【参考方案2】:

更新到版本:

"sequelize": "^5.8.6"

并从

中删除 operatorsAliases 参数
new Sequelize()

删除了折旧警告

【讨论】:

这是 v5 的无操作,应该被删除。【参考方案3】:
const sequelize = new Sequelize(
  username: process.env.DBUSERNAME,
  host: process.env.DBHOST,
  database: process.env.DBNAME,
  password: process.env.DBPASSWORD,
  dialect: 'postgres',
  define: 
    timestamps: false,
  ,
  operatorsAliases: false,
  pool: 
    max: 5,
    min: 0,
    idle: 10000
  ,

);

【讨论】:

以上是关于Sequelize 已弃用的错误消息的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 2(.7) 中禁用已弃用的警告

同步 sequelize 模型:sequelize.import() 不是函数(并且已弃用)

如何隐藏zend framework2已弃用的消息

如何在 bash 中抑制 npm WARN 已弃用的消息

更新 Swift 中已弃用的 Firebase 函数

Libtorrent:声明已弃用的错误