2016-11-09 4 views
0

Я пытаюсь осуществить регистрацию в экспресс, используя passport.js и когда я отправить форму, на консоли сервера я получил:Пользователь не конструктор в экспресс с паспортом

POST /user/register 500 62.273 ms - 2008 
TypeError: User is not a constructor 
    at /mean-auth/server/routes/api.js:8:17 

Вот является апи. JS файл с ошибкой:

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 

var User = require('../models/user.js'); 

router.post('/register', function(req, res) { 
    User.register(new User({ username: req.body.username }), 
    req.body.password, function(err, account) { 
    if (err) { 
     return res.status(500).json({ 
     err: err 
     }); 
    } 
    passport.authenticate('local')(req, res, function() { 
     return res.status(200).json({ 
     status: 'Registration successful!' 
     }); 
    }); 
    }); 
}); 
module.exports = router; 

модель пользователя (user.js) выглядит следующим образом:

// user model 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var passportLocalMongoose = require('passport-local-mongoose'); 
var bcrypt = require('bcrypt'); 

var userSchema = mongoose.Schema({ 
    username: String, 
    password: String 
}); 

userSchema.plugin(passportLocalMongoose); 

var User = mongoose.model('User', userSchema); 

module.exports = { 
    User: User 
}; 

module.exports.createUser = function(newUser, callback){ 
    bcrypt.genSalt(10, function(err, salt) { 
     bcrypt.hash(newUser.password, salt, function(err, hash) { 
      newUser.password = hash; 
      newUser.save(callback); 
     }); 
    }); 
} 

module.exports.getUserByUsername = function(username, callback){ 
    var query = {username: username}; 
    User.findOne(query, callback); 
} 

module.exports.getUserById = function(id, callback){ 
    User.findById(id, callback); 
} 

module.exports.comparePassword = function(candidatePassword, hash, callback){ 
    bcrypt.compare(candidatePassword, hash, function(err, isMatch) { 
     if(err) throw err; 
     callback(null, isMatch); 
    }); 
} 

и я также пытался с createUser методом и newUser объекта:

var User = require('../models/user.js'); 

router.post('/register', function(req, res) { 
    var username = req.body.username; 
    var password = req.body.password; 

    var newUser = new User({ 
    username: username, 
    password: password 
    }); 

    User.createUser(newUser, function(err, user){ 
    if(err) throw err; 
    console.log(user); 
    }); 

    passport.authenticate('local')(req, res, function() { 
    return res.status(200).json({ 
     status: 'Registration successful!' 
    }); 
    }); 
}); 

но появляется та же ошибка. Что-то не в порядке с определениемм пользователя?

ответ

3

Похоже, что вы экспортируете объект с пользователем внутри него.

module.exports = { 
    User: User 
}; 

При импорте этого файла, попробуйте сделать это следующим образом:

var User = require('../models/user.js').User; 
0

Вы не нуждаетесь в расширении .js в инструкции require.

var User = require('../models/user'); 
Смежные вопросы