【问题标题】:sails-mysql: ER_NO_DB_ERROR: No database selectedSails-mysql:ER_NO_DB_ERROR:未选择数据库
【发布时间】:2014-04-28 05:49:45
【问题描述】:

当尝试使用sails-mysql 时,我得到一个ER_NO_DB_ERROR: No database selected 异常。 即使我遵循了所有我能找到的说明,也尽可能地接近。我还研究了相关问题:

到目前为止似乎没有任何帮助。

这就是我正在做的事情:

我从一个新项目开始:

sails new sql-test
cd sql-test

安装sails-mysql

sudo npm install sails-mysql

我改变了配置:

// config/adapters.js

module.exports.adapters = {
  'default': 'mysql',
  mysql: {
    module   : 'sails-mysql',
    host     : 'localhost',
    port     : 3306,
    user     : 'root',
    password : 'superSecret',
    database : 'testDB'
  }
};

创建了一个模型:

// api/models/User.js
module.exports = {
  attributes: {
      name: 'string'
  }
};

当我尝试从项目的根目录运行它时:

sails lift

我得到以下信息:

Logic error in mySQL ORM.
{ [Error: ER_NO_DB_ERROR: No database selected] code: 'ER_NO_DB_ERROR', index: 0 }
error: Hook failed to load: orm (Error: ER_NO_DB_ERROR: No database selected)
error: Error encountered while loading Sails core!
error: Error: ER_NO_DB_ERROR: No database selected
    at Query.Sequence._packetToError (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:32:14)
    at Query.ErrorPacket (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Query.js:82:18)
    at Protocol._parsePacket (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:172:24)
    at Parser.write (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.ondata (stream.js:51:26)
    at Socket.EventEmitter.emit (events.js:117:20)
    at Socket.<anonymous> (_stream_readable.js:746:14)
    at Socket.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    at emitReadable (_stream_readable.js:404:5)
    at readableAddChunk (_stream_readable.js:165:9)
    at Socket.Readable.push (_stream_readable.js:127:10)
    at TCP.onread (net.js:526:21)
    --------------------
    at Query.Sequence (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:15:20)
    at new Query (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Query.js:12:12)
    at Function.Connection.createQuery (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:48:10)
    at Connection.query (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/Connection.js:100:26)
    at __DESCRIBE__ (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/lib/adapter.js:121:20)
    at afterwards (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/lib/adapter.js:571:7)
    at Handshake._callback (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/lib/adapter.js:549:9)
    at Handshake.Sequence.end (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:66:24)
    at Handshake.Sequence.OkPacket (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:75:8)
    at Protocol._parsePacket (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:172:24)
    at Parser.write (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/home/tster/Documents/sandbox/sql-test/node_modules/sails-mysql/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.ondata (stream.js:51:26)
    at Socket.EventEmitter.emit (events.js:117:20)
    at Socket.<anonymous> (_stream_readable.js:746:14)
    at Socket.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    at emitReadable (_stream_readable.js:404:5)
    at readableAddChunk (_stream_readable.js:165:9)
    at Socket.Readable.push (_stream_readable.js:127:10)
    at TCP.onread (net.js:526:21)

附加信息:

  • v0.9.13
  • sails-mysql (v0.9.9)
  • mysql v14.14 Distrib 5.5.34,适用于使用 readline 6.2 的 debian-linux-gnu (x86_64)
  • 我可以通过命令行连接数据库。
  • 使用node-mysql 时,我可以连接和查询数据库

谁能给我一些建议?我错过了什么吗?还有什么我应该检查的吗?

【问题讨论】:

  • Sails.js 和sails-mysql的版本是多少?
  • 抱歉,为了完整起见:sails (v0.9.13) 和sails-mysql (v0.9.9)
  • 看起来这种情况正在发生,因为在 Sails 起重时有东西试图访问数据库。我尝试使用新的 Sails v0.9 应用程序,但无法重现。您是否碰巧打开了一个网页,该网页可能在 Sails 启动时尝试通过 Sockets 连接,或者其他一些可能会访问数据库的引导代码?

标签: mysql node.js sails.js


【解决方案1】:

我刚刚遇到了同样的问题。为了让它工作,我必须将适配器配置信息添加到我的模型中,例如/api/models/User.js:

module.exports = {

     adapter: 'mysql',

      config: {
        host: 'localhost',
        user: 'user',
        port:'3306',
        // Psst.. You can put your password in config/local.js instead
        // so you don't inadvertently push it up if you're using version control
        password: 'secret', 
        database: 'sailstest'
      },

    attributes: {
    firstName: 'STRING'
    }

};

查看文档:

http://sailsjs.org/#!documentation/models

我还必须手动添加 /api/controllers/UserController.js,因为生成函数没有将它添加到这个应用程序中,尽管它确实添加了它在我之前制作的测试应用程序中。

更新:

安装 Sails.js 测试版以获得更好的功能。

npm install sails@beta -g

不仅配置实际上按预期工作(在 config/connections.js 下),ORM 功能还支持关联,而 0.9 版本不支持这些功能。

【讨论】:

  • 哇,这确实有效。谢谢!即使据我了解文档,如果我想覆盖 config/adapters.js 中的全局配置(我的情况默认值:'mysql'),我只需要在模型中显式指定适配器?但由于某些原因,我的全局默认设置被忽略了。
  • 我刚刚安装了 Sails.js 测试版,发现它比当前版本好得多。这样做: npm installsails@beta -g.
【解决方案2】:

我知道这个问题已经有了答案,但它更像是一种解决方法。这就是为我解决同样问题的原因。

将默认的 adapters.js 文件 mysql 适配器对象从 myLocalMySQLDatabase 更改为简单的 mysql 似乎对我来说解决了这个问题。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    您必须注意数据类型。

    如果你有这样的模块

    module.exports = {
      attributes: {
          name: 'string'
      }
    };
    

    在模态名称下的数据库中表字段名称必须是varchar。

    我的数据库字段设置为文本,我收到此错误,将其更改为 varchar 时一切正常。

    【讨论】:

      【解决方案4】:

      .env 文件不在同一目录下时,您可能会收到此错误。

      您可以使用以下代码检查错误是什么:

      const result = require('dotenv').config();
      if (result.error) {
        console.log(result.error)
      }
      console.log(result.parsed)
      

      【讨论】:

      • 这帮助很大!谢谢。在项目中添加了新人。他们必须设置一个 .env 文件,因为它不在存储库中。他们收到以下错误:错误:ER_NO_DB_ERROR:未选择数据库。我们想不通。我将您提供的代码添加到我们的 index.js 中,它在 .env 文件中显示了配置信息。当他们添加它时,他们得到一个文件不存在的错误。原来他们将文件添加为“env”,而不是“.env”。
      • 很高兴它有帮助!
      猜你喜欢
      • 2014-05-14
      • 2017-11-03
      • 2014-04-09
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 2016-03-24
      相关资源
      最近更新 更多