2016-11-09 44 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 

這裏是API。錯誤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

您在require語句中不需要.js擴展名。

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