【问题标题】:Unhandled rejection SequelizeDatabaseError: Unknown column 'NaN' in 'field list'未处理的拒绝 SequelizeDatabaseError:“字段列表”中的未知列“NaN”
【发布时间】:2018-06-23 20:54:57
【问题描述】:

我正在尝试通过 sequelize 更新表格。但我收到错误-未处理的拒绝 SequelizeDatabaseError: Unknown column 'NaN' in 'field list' 。我的代码是

db.billingplan.findById(req.params.id).then(result=>{
            result.update({
                'poregisterReference': String(req.body.reference),
                'po_number' : req.body.po_number,
                'billing_milestone': String(req.body.billing_milestone),
                'billing_milestone_probable_date':checkDate(req.body.billing_milestone_probable_date),
                'milestone_blling_amount':req.body.milestone_billing_amount,
                'actual_billing_date': actual_billing_date,
                'bill_number':req.body.bill_number,
                'bill_amount':bill_amount,
                'tax_rate':tax_rate,
                'tds_rate':tds_rate,
                'recovery_date': recovery_date,
                'recovery_amount':recovery_amount ,
                'utr_number': String(req.body.utr_number),
                'bill_amount_with_tax': bill_amount_with_tax,
                'net_recoverable_after_tds': net_recoverable_after_tds ,
                'short_recovery': recovery_amount - net_recoverable_after_tds,
                'recovery_period': dayDiff(recovery_date, actual_billing_date )
            });
        });

我已经使用这种方式更新而不使用 where 子句,但从未遇到过这个问题,所以我猜这不是问题。有人可以告诉我我在这里做错了什么。 以下是堆栈跟踪:

Unhandled rejection SequelizeDatabaseError: Unknown column 'NaN' in 'field list'
    at Query.formatError (D:\Users\Temp\Desktop\POregister\node_modules\sequelize\lib\dialects\mysql\query.js:228:16)
    at Query.connection.query [as onResult] (D:\Users\Temp\Desktop\POregister\node_modules\sequelize\lib\dialects\mysql\query.js:55:23)
    at Query.Command.execute (D:\Users\Temp\Desktop\POregister\node_modules\mysql2\lib\commands\command.js:30:12)
    at Connection.handlePacket (D:\Users\Temp\Desktop\POregister\node_modules\mysql2\lib\connection.js:515:28)
    at PacketParser.onPacket (D:\Users\Temp\Desktop\POregister\node_modules\mysql2\lib\connection.js:94:16)
    at PacketParser.executeStart (D:\Users\Temp\Desktop\POregister\node_modules\mysql2\lib\packet_parser.js:77:14)
    at Socket.<anonymous> (D:\Users\Temp\Desktop\POregister\node_modules\mysql2\lib\connection.js:102:29)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at Socket.Readable.push (_stream_readable.js:134:10)
    at TCP.onread (net.js:547:20)

【问题讨论】:

  • 这条评论完全是一个猜测:Sequelize 正在通过连接字符串来构造 SQL,当涉及到其中一个数字时,它以数值形式返回 NaN,并尽职尽责地将其转换为字符串并将其连接起来,导致类似 ` ... columnName = NaN .... When the database engine tried to execute this it saw a clause that is basically ... COLUMN = COLUMN ..., but NaN` 不作为列存在,因此出现错误。跨度>
  • 但是,sequelize 执行的更新语句总是用引号引起来,所以据我了解是不会发生的
  • 您的 req.body 中未定义某些内容...以下参数可能是其中之一 poregisterReference, billing_milestone,utr_number,recovery_period... 安慰他们
  • 您的语句中的一个数字表达式导致NaN
  • @LasseVågsætherKarlsen 这行得通.. 谢谢。但错误输出没有意义:/

标签: node.js sequelize.js


【解决方案1】:

您可能想检查您如何定义表的关联(hasOne()、belongsTo() 等)。我在代码中的某处定义了不必要的关联并且遇到了类似的问题。这会引入不需要的列/属性。

【讨论】:

【解决方案2】:

您应该做的是检查您设置为 FindOptions 的值。我认为其中之一是NaN。我有同样的错误。

注意我将我的选项写在一个变量中,然后打印出来。

let options = {
    where: {},
    limit: page?.limit ?? PHONE_LIMITATION,
    attributes: [
      Phone.col.id,
      Phone.col.phone,
      Phone.col.userId,
      Phone.col.createdAt,
      Phone.col.updatedAt,
    ],
    offset: page?.offset ?? 0,
};
console.log(options);
// other stuff

【讨论】:

  • 非常有助于快速找到问题。
猜你喜欢
  • 1970-01-01
  • 2016-07-21
  • 2018-10-15
  • 2019-09-19
  • 2016-01-01
  • 2018-01-05
  • 2018-03-12
  • 1970-01-01
  • 2018-12-18
相关资源
最近更新 更多