Sequelize - findOne().success() 未定义
Posted
技术标签:
【中文标题】Sequelize - findOne().success() 未定义【英文标题】:Sequelize - findOne().success() is undefined 【发布时间】:2015-11-19 16:27:07 【问题描述】:我正在关注 passport.js 文档,以便使用 Sequelize 作为我的 postgres 数据库的 ORM 创建 LocalStrategy。但是,在身份验证期间,在我的 login.js 模块中执行 User.findOne(...).success(function(user)...]);
会返回 undefined
。我做错了什么?
user.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;
我的 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;
【问题讨论】:
您应该接受@robertklep 的正确答案。 【参考方案1】:Sequelize 使用 bluebird
承诺库的修改版本,它没有 .success()
函数。
改为使用.then()
(也遵循Promises/A+ 标准):
User.find(options).then(
function(user) ... ,
function(err) ...
);
【讨论】:
@abhishek,sequelize
的当前版本使用bluebird
的库存版本。要捕获错误,请使用 .catch
或 .error
。可以在here找到文档。以上是关于Sequelize - findOne().success() 未定义的主要内容,如果未能解决你的问题,请参考以下文章
[usedIf在数据库中时,sequelize findOne找不到用户标识
将属性添加到 Sequelize FindOne 返回的对象
在使用急切加载的 findOne Sequelize 方法期间,Nodejs 堆内存不足