【问题标题】:Sails.JS + MySQL: Unknown column 'NaN' in 'where clause'Sails.JS + MySQL:“where 子句”中的未知列“NaN”
【发布时间】:2015-01-08 08:40:38
【问题描述】:

这是我第一次将sails.js 与mySQL 数据库一起使用,我对这个错误感到非常困惑。

我有一个名为“公司”的控制器和模型。它与 mySQL 数据库中的表“公司”有关。该表本身与名为“模块”和“用户”的两个表具有一对多关联(每个用户/模块必须与一个公司 ID 连接)。我已经在 MySQL 数据库中设置了外键。

问题是..每次我从这个控制器打开任何页面/动作时,都会出现这个错误:

    error: Sending 500 ("Server Error") response: 
 Error (E_UNKNOWN) :: Encountered an unexpected error
: ER_BAD_FIELD_ERROR: Unknown column 'NaN' in 'where clause'
    at Query.Sequence._packetToError (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:30:14)
    at Query.ErrorPacket (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Query.js:82:18)
    at Protocol._parsePacket (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:213:24)
    at Parser.write (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.<anonymous> (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:75:28)
    at Socket.emit (events.js:95:17)
    at Socket.<anonymous> (_stream_readable.js:764:14)
    at Socket.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:426:10)
    --------------------
    at Protocol._enqueue (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:110:48)


    at PoolConnection.Connection.query (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:166:25)
    at PoolConnection.liveConnection.query (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/lib/connections/spawn.js:98:16)
    at __FIND__ (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/lib/adapter.js:836:20)
    at afterwards (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/lib/connections/spawn.js:104:5)
    at /Users/alanyudh/Sites/matta/node_modules/sails-mysql/lib/connections/spawn.js:40:7
    at Pool.<anonymous> (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/Pool.js:51:14)
    at Handshake.Sequence.end (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:24)
    at Handshake.Sequence.OkPacket (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:87:8)
    at Protocol._parsePacket (/Users/alanyudh/Sites/matta/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:213:24)

Details:  Error: ER_BAD_FIELD_ERROR: Unknown column 'NaN' in 'where clause'

这是我的公司模型:

    module.exports = {
  attributes: {
      name:{
        type:"string",
        required:true,
        unique:true,
        minLength: 2
      },
      type:{
        type:"string",
        enum: ['hq','sub'],
        defaultsTo: 'hq'
      },     
      desc:{
        type:"text",
        required:true
      },
      logo: {
        type: 'string'
      },
      address: {
        type: 'text'
      },
      city: {
        type: 'string'
      },
      region: {
        type: 'string'
      },
      country: {
        type: 'string'
      },
      zipcode: {
        type: 'string'
      },
      phone_number: {
        type: 'string'
      },
      website: {
        type: 'string'
      }
  },
};

我尝试过使用“autoPK: false”、“schema: true”、添加“columnName/fieldName”,但它们都不起作用。

错误是什么意思? 我该如何解决?

非常感谢。

【问题讨论】:

  • 你能显示SQL查询代码吗?只需检查您的 where 子句!
  • 如何显示SQL查询代码?我实际上只是打开 localhost:1337/company/index 页面并收到此错误
  • 根据您的错误,您在 where 子句中使用了错误的列名。因此,您需要检查与数据库交互的模型代码,以确保您的 SQL 查询是正确的。
  • @PradyumnaSwain Sails.js 使用称为 Waterline 的 ORM 层。大多数使用sails 的人不会编写任何SQL 代码。所以要求他们检查他们的 SQL 代码是没有帮助的。

标签: mysql sails.js waterline


【解决方案1】:

出现 localhost:1337/company/index 是您的问题,而不是任何 mysql 或其他 orm 问题!

这是一个路由配置探针。当您打开此 URL 时,默认的航行行为是您尝试通过默认的 REST api 访问特定的公司记录。检查默认的休息routes behavior

为了更明确地说明您的情况,sails 解释为您正在查询 ID 为“index”的特定公司,该公司不是数字 NaN,因此您会收到此错误。

RESTful 路由,路径始终为 /:modelIdentity 或 /:modelIdentity/:id。

【讨论】:

  • 谢谢它的工作!但是,在公司控制器中,我实际上已经创建了一个“索引”:function(req, res, next) {res.view();},为什么它仍然认为它搜索模型的 id ?我使用相同的方法但使用 mongoDB 没有这样的错误
  • @AlanYudhahutama 你在config/routes.js 中正确定义了你的路线吗?你应该有类似'get /company/index' :{ controller : 'CompanyController',action : 'index'}, 的东西>
  • 与 NestJS 有同样的问题,这是解决方案,谢谢!
【解决方案2】:

对于您的具体情况,我没有确切的答案,但是,我需要指出您,同时在这里发泄我的挫败感,这是各种 API 的一个可悲的臭名昭著的问题,当它们没有解决时足够明确的错误原因,只是让异常堆栈懒惰地冒泡到下一个错误处理程序。这通常会完全误导开发人员关于实际异常的原因。因此请务必注意,您看到的错误文本可能与实际问题几乎不符。好吧,至少你知道有问题。现在你必须运用自己的智慧和无穷无尽的变化或方法来解决这个问题。

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2018-04-01
    • 2017-06-05
    • 1970-01-01
    • 2016-07-11
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多