【发布时间】: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 ..., butNaN` 不作为列存在,因此出现错误。跨度> -
但是,sequelize 执行的更新语句总是用引号引起来,所以据我了解是不会发生的
-
您的 req.body 中未定义某些内容...以下参数可能是其中之一
poregisterReference,billing_milestone,utr_number,recovery_period... 安慰他们 -
您的语句中的一个数字表达式导致
NaN。 -
@LasseVågsætherKarlsen 这行得通.. 谢谢。但错误输出没有意义:/
标签: node.js sequelize.js