我目前正在从我的Node js应用程序中从mongodb迁移到MySQL。我使用续集作为ORM,但我在迁移一些passportjs代码时遇到了一些麻烦。Ssequelizejs,MySQL和passportjs user.findOne不是函数
我有以下模式。
user.js的:
"use strict";
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define("users", {
username: DataTypes.STRING,
localemail: DataTypes.STRING,
localpassword: DataTypes.STRING,
facebookid: DataTypes.STRING,
facebooktoken: DataTypes.STRING,
facebookemail: DataTypes.STRING,
facebookname: DataTypes.STRING,
twitterid: DataTypes.STRING,
twittertoken: DataTypes.STRING,
twitterdisplayname: DataTypes.STRING,
twitterusername: DataTypes.STRING,
googleid: DataTypes.STRING,
googletoken: DataTypes.STRING,
googleemail: DataTypes.STRING,
googlename: DataTypes.STRING
});
return User;
};
而在我passportjs文件中的以下功能:
...
// load all the things we need
var LocalStrategy = require('passport-local').Strategy;
var FacebookStrategy = require('passport-facebook').Strategy;
var TwitterStrategy = require('passport-twitter').Strategy;
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
// load up the user model
var User = require('../models/user');
...
passport.use('local-login', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
if (email)
email = email.toLowerCase();
// asynchronous
process.nextTick(function() {
User.findOne({
where: {
localemail: email
}
}).then(function(user) {
// if there are any errors, return the error
if (err)
return done(err);
// if no user is found, return the message
if (!user)
return done(null, false, req.flash('loginMessage', 'No user found.'));
if (!validPassword(password))
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));
// all is well, return user
else
return done(null, user);
});
});
}));
.. 。
个的应用程序退出,出现以下错误:
passport.js:100
User.findOne({
^
TypeError: User.findOne is not a function
我已经看过这段代码在GitHub上的灵感:
https://github.com/sequelize/express-example
任何想法,我俯瞰什么?
UPDATE:
所以在我passport.js文件我已经做到了这一点:
var models = require('../models');
console.log("models.User:" +models.User);
其输出这样的:
npm start app.js
> myapp0.0.0 start /home/mathias/nodejs/myapp
> DEBUG=express-sequelize
node ./bin/www "app.js"
models.User:undefined
express-sequelize
Express server listening on port 3000 +0ms express-sequelize
Listening on port 3000 +7ms –
这给出了一个[对象:对象]中控制台:
var models = require('../models');
console.log("models:" +models);
的这也给未定义:
var models = require('../models').User;
console.log("models:" +models);
更新与config.json文件:
{
"development": {
"username": "root",
"password": "password",
"database": "myapp",
"host": "0.0.0.0",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": "password",
"database": "myapp",
"host": "0.0.0.0",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": "password",
"database": "myapp",
"host": "0.0.0.0",
"dialect": "mysql"
}
}
'user.js'出口返回模型的功能,所以在导入该功能后,您需要调用它(使用正确的参数)并且返回值将是'User'模型。 – robertklep
嗨robertklep我试着用var models = require('../ models')。没有运气。任何我可能忽略的东西? – Tony