【问题标题】:User is not constructor in Express with Passport用户不是带有 Passport 的 Express 中的构造函数
【发布时间】:2017-03-22 22:29:27
【问题描述】:

我正在尝试使用 passport.js 在 Express 中实现注册,当我提交表单时,在服务器控制台上我得到了:

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!'
    });
  });
});

但出现同样的错误。 User的定义有问题吗?

【问题讨论】:

    标签: javascript node.js express passport.js mean-stack


    【解决方案1】:

    您不需要在 require 语句中添加 .js 扩展名。

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

    【讨论】:

      【解决方案2】:

      您似乎正在导出一个包含用户的对象。

      module.exports = {
        User: User
      };
      

      导入该文件时,请尝试这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-22
        • 2017-04-18
        • 2018-11-17
        • 2017-08-02
        • 1970-01-01
        • 2018-12-07
        • 1970-01-01
        • 2017-04-08
        相关资源
        最近更新 更多