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
Sequelize - findOne().success() is undefined
提问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 bluebird
promise 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) { ... }
);