javascript Sequelize - findOne().success() 未定义

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32212945/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-28 14:59:02  来源:igfitidea点击:

Sequelize - findOne().success() is undefined

javascriptnode.jspassport.jssequelize.js

提问by Below the Radar

I am following the passport.js doc in order to create a LocalStrategy using Sequelize as ORM for my postgres database. However, during authentification, doing User.findOne(...).success(function(user){...]});in my login.js module returns undefined. What am I doing wrong?

我正在关注passport.js doc,以便使用Sequelize 作为我的postgres 数据库的ORM 创建一个LocalStrategy。但是,在身份验证期间,User.findOne(...).success(function(user){...]});在我的 login.js 模块中执行返回undefined. 我究竟做错了什么?

user.js:

用户.js:

var pg = require('pg');
var Sequelize = require('sequelize');

var sequelize = new Sequelize('database', 'username', 'password', {
    host: 'localhost',
    port: 5432,
    dialect: 'postgres'
});

var User = sequelize.define('users', {
    username: Sequelize.STRING,
    password: Sequelize.STRING

});

User.sync();

module.exports = User;

my login.js (router)

我的 login.js(路由器)

var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;


passport.serializeUser(function(user, done){
    done(null, user.id);
});

passport.deserializeUser(function(id, done){
    console.log(id)
    User.findById(id, function(err, user){
        done(err, user);
    });
});

passport.use(new LocalStrategy(
    function(username, password, done){
        var User = require('../models/user');
        User.find({where:{username: username, password: password}}).success(function(user){
            if(!user) {
                return done(null, false, {message: 'Nom d\'usager incorrect.' });
            }
            if (!user.validPassword(password)) {
                return done(null, false, { message: 'Mot de passe incorrect.' });
            }
            return done(null, user);
        });
    }
));

router.post('/login', passport.authenticate('local', { successRedirect: '/decoupage',
                                                       failureRedirect: '/login',
                                                       failureFlash: true })
);


module.exports = router;

回答by robertklep

Sequelize uses a modified version of the bluebirdpromise library, which doesn't have a .success()function.

Sequelize 使用了 Promisebluebird库的修改版本,它没有.success()函数。

Instead, use .then()(which also follows the Promises/A+standard):

相反,使用.then()(也遵循Promises/A+标准):

User.find(options).then(
  function(user) { ... },
  function(err) { ... }
);