Javascript Passport无法使用模块化Express应用程序

Javascript Passport无法使用模块化Express应用程序,javascript,node.js,authentication,express,passport.js,Javascript,Node.js,Authentication,Express,Passport.js,因此,我正在尝试使用模块化目录结构设置一个半RESTful Express应用程序 我首先在Vimeo()上观看TJ的视频,介绍如何设置模块化express应用程序。我真的很喜欢他做这件事的方式,并且想扩展一个应用程序 问题是,我认为Passport.js由于他正在进行的模块化设置,使它处理身份验证的方式变得混乱。因为如果我使用另一个模块化程度较低的目录结构,Express应用程序运行良好 如果我按照他的步骤,尝试集成Passport.js,视图呈现良好,但是如果我尝试注册一个新用户,当POST

因此,我正在尝试使用模块化目录结构设置一个半RESTful Express应用程序

我首先在Vimeo()上观看TJ的视频,介绍如何设置模块化express应用程序。我真的很喜欢他做这件事的方式,并且想扩展一个应用程序

问题是,我认为Passport.js由于他正在进行的模块化设置,使它处理身份验证的方式变得混乱。因为如果我使用另一个模块化程度较低的目录结构,Express应用程序运行良好

如果我按照他的步骤,尝试集成Passport.js,视图呈现良好,但是如果我尝试注册一个新用户,当POST请求传递到我所做的用户控制器时,我会得到一个非常奇怪的错误:

crypto.js:599
    return binding.PBKDF2(password, salt, iterations, keylen, digest, callback
                   ^
TypeError: Not a buffer
    at TypeError (native)
    at pbkdf2 (crypto.js:599:20)
    at Object.exports.pbkdf2 (crypto.js:585:10)
    at Object.ondone (/home/karysto/Desktop/modular-multiblog/node_modules/passport-local-mongoose/lib/passport-local-mongoose.js:71:20)
我真的很困惑为什么会发生这种情况,但我有充分的理由相信是模块化设置导致了这种情况

这是我的
users
controller.js文件:

const
    User = require('./model'); // including the user model

exports.index = function(req, res) {
  User.find(function(err, users) {
    if (err) throw err;
    return res.status(200).json(users);
  });
};

exports.show = function(req, res) {
  User.find(req.param.id, function(err, user) {
    if (err) throw err;
    return res.status(200).json(user);
  });
};

exports.create = function(req, res) {
  User.register( new User({ username: req.body.username, password: req.body.password}), function(err, user) {
    if (err) {
      return res.render('users/register', { info: "Sorry. That username already exists. Try again." });
    };

    // successful account creation, redirect to profile route.
    passport.authenticate('local')(function (req, res) {
      return res.render('users/show', {
        user: req.user
      });
    });
  });
};

exports.new = function(req, res) {
  return res.render('users/register');
};

exports.login = function(req, res) {
  if (req.user) {
    res.render('users/show', {
      user: req.user
    });
  }
  else {
    res.render('users/login');
  }
};

exports.logout = function(req, res) {
  req.logout();
  return res.render('static_pages/index');
};
这是我的
users
route.js文件:

const
    controller = require('./controller')
  , express    = require('express')
  , router     = express.Router()
  , passport = require('passport');

router.post('/register', controller.create);
router.get('/register', controller.new);

router.post('/login', passport.authenticate('local'), controller.login);
router.get('/login', controller.login);
router.get('/logout', controller.logout);

router.get('/:id', controller.show);
router.get('/', controller.index);

module.exports = router;
用户
模型也没有什么特别之处:

const
   mongoose = require('mongoose')
 , passportLocalMongoose = require('passport-local-mongoose');

const User = new mongoose.Schema({
    username: String,
    password: String
});

// Adds the User model to the mongodb schema and passport model.
// Allows the methods .register to be added for this schema.
User.plugin(passportLocalMongoose);

module.exports = mongoose.model('User', User);
如果有帮助,我的应用程序目录结构如下:


api/app.js bin/makefile package.json public/README routes/test/views/

应用程序的其余部分,以及每个目录的文件,我省略了公共目录,因为它目前未被使用:


/api:
发布/静态页面/用户/


/api/职位:
controller.js model.js routes.js


/api/静态页面:
controller.js routes.js


/api/用户:
controller.js model.js routes.js


/箱:
www


/路线:
index.js users.js


/测试:
test.user.js


/观点:
error.jade index.jade layout.jade posts/static\u pages/users/


/视图/静态页面:
关于.jade contact.jade index.jade


/视图/用户:

login.jade register.jade show.jade

您没有提到遇到了什么错误?是我吗?就在这篇文章的开头。这是
crypto.js 599
错误,是第一块降价代码。你链接的视频已经有两年了,从那以后发生了很多变化。这可能需要一些认真的调试,我建议您共享一个github repo,以便更容易诊断。如果你不喜欢使用Passport和MongoDB,我建议你。免责声明:我在那里工作,我管理Node.js集成:)