用户不是带有 Passport 的 Express 中的构造函数
Posted
技术标签:
【中文标题】用户不是带有 Passport 的 Express 中的构造函数【英文标题】:User is not constructor in Express with Passport 【发布时间】: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的定义有问题吗?
【问题讨论】:
【参考方案1】:您不需要在 require 语句中添加 .js
扩展名。
var User = require('../models/user');
【讨论】:
【参考方案2】:您似乎正在导出一个包含用户的对象。
module.exports =
User: User
;
导入该文件时,请尝试这样做:
var User = require('../models/user.js').User;
【讨论】:
以上是关于用户不是带有 Passport 的 Express 中的构造函数的主要内容,如果未能解决你的问题,请参考以下文章
用户注册时出错(Express.Js、Passport、MySQL)
使用 Passport.js、express-session 和 express-mysql-session 进行用户身份验证