【问题标题】:Sequelize Authentication cannot completeSequelize 身份验证无法完成
【发布时间】:2015-07-10 18:04:28
【问题描述】:

我开始使用 node.js 和 sequelize,我收到以下错误:

/home/cbaket/test/test.js:9
    .complete(function(err) {
     ^
TypeError: undefined is not a function
    at Object.<anonymous> (/home/cbaket/test/test.js:9:6)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

我的文件:test.js 是:

var Sequelize = require('sequelize');
var sequelize = new Sequelize('apidb', 'apidb', 'apidb', {
    dialect: "mysql", // or 'sqlite', mysql', 'mariadb'
    port:    3306 // or 5432 (for postgres)
});

sequelize
    .authenticate()
    .complete(function(err) {
        if (!!err) {
            console.log('Unable to connect to the database:', err)
        } else {
            console.log('Connection has been established successfully.')
        }
    });

我正在关注 Sequelieze 网站上的早期教程之一。

我用下面的命令安装了最新的sequelize和mysql。

$ npm install mysql  
$ npm install sequelize

我尝试了很多类似的例子,但总是得到同样的错误。 这些库正在工作,因为其他示例工作正常,我可以在数据库中创建表并从中获取数据,但身份验证功能总是失败。

谢谢! ;)

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

    Authenticate 在后续版本的 sequelize 中返回一个 Promise: https://github.com/sequelize/sequelize/blob/2.0/lib/sequelize.js#L939

    在此处阅读 bluebird 文档,因为它非常有用: https://github.com/petkaantonov/bluebird/blob/master/API.md

    这样的事情应该可以工作(确保检查连接错误......这只是一个简单的例子):

    var Sequelize = require('sequelize');
    var sql = new Sequelize('DB', 'UNAME', 'PASS', {
        host: 'localhost',
        port: 3306,
        dialect: 'mysql'
    });
    
    var test = sql.authenticate()
        .then(function () {
            console.log("CONNECTED! ");
        })
        .catch(function (err) {
            console.log("SOMETHING DONE GOOFED");
        })
        .done();
    

    【讨论】:

    • 你有正确的答案。所以+1。但是,您不需要像使用 var test = sql.authenticate()... 那样将身份验证分配给 var... 您可以只使用 sql.authenticate()...
    【解决方案2】:

    嗨,sequelize 在最新版本中更改了他们的身份验证方案。请恢复到旧版本并尝试一下

    【讨论】:

    • 那么我如何在新的续集版本中测试连接?谢谢。
    【解决方案3】:

    你是对的! ;) 我只是删除了 sequelize,然后重新安装了一个旧版本:

    npm install sequelize@1.7.0

    它有效!

    我没有找到任何相关信息...他们不应该警告用户不要使用已弃用或修改的功能吗?¿?...

    谢谢!! ;)

    【讨论】:

      【解决方案4】:

      我怀疑你正在寻找

      Sequelize.authenticate().complete(...)
      

      而不是

      Sequelize.authenticate.complete(...)
      

      Sequelize.authenticate 是一个返回承诺的函数。它不是具有 .complete() 方法的对象。如果您不执行它,则不会返回任何承诺。如果没有返回 Promise,则不能在 Promise 上运行 .complete()。

      希望对你有所帮助。

      这是Promises from the Mozilla Development Network 的一些文档。

      【讨论】:

      • 感谢您这么快回答! ;) 我刚试过,但没有用 :( 我发现其他语法相同的例子:sequelize.authenticata().complete(...)
      【解决方案5】:

      卸载系统中安装的 sequelize 模块并使用此版本安装

      npm install sequelize@1.7.0

      检查模型文件夹并确保它包含正确的文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-04
        • 2012-03-11
        • 1970-01-01
        • 1970-01-01
        • 2020-01-22
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        相关资源
        最近更新 更多