Route.post () требует функцию обратного вызова, но получил [объект Undefined] при использовании passport.js - PullRequest
0 голосов
/ 03 февраля 2019

Я получаю Route.post() requires a callback function but got a [object Undefined] как ошибку.Это происходит только тогда, когда я использую passport.js и контроллер, который я назвал «session».

Я смотрел на SO, и до сих пор большинство ответов были просто в OP, в которых говорилось, что они его получили, или что какая-то часть их кода создавала функцию, которой не должно было быть.Также не многие дали понять, была ли это возможная проблема конфигурации паспорта или нет.

Сообщение об ошибке появляется, когда я пытаюсь запустить свое приложение, поэтому я даже не могу проверить, работают ли маршруты больше или нет.

Ниже приведен минимальный код, который я мог бы использовать для воспроизведения ошибки.

APP.JS

const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const passport    = require("passport");


const app = express();
const config = require("./config/config");

mongoose.connect(config.db, {autoReconnect: true, useNewUrlParser: true}, (err) => {
    if (!err) console.log('MongoDB has connected successfully.');
});
mongoose.connection.on('error', function() {
  console.error('MongoDB Connection Error. Make sure MongoDB is running.');
});


app.use(bodyParser.urlencoded({extended: true}));

require('./controllers/passport')(passport);
app.use(passport.initialize());

app.use('/', require('./routes/user.js'));


app.listen(8080, () => {
    console.log('Auth server running express started on port 8080}.');
});

USER.JS

const express = require('express');
const router = express.Router();
const multer  = require('multer');
const upload = multer();

var signupFormCheck = require('../middleware/signup').signupFormCheck;

const sessions = require("../controllers/sessions");

router.post('/signup',
  upload.none(), 
  signupFormCheck,
  sessions.postSignup
  );

module.exports = router;

SESSIONS.JS

const passport = require('passport');

exports.postSignup = (req, res, next) => {
    passport.authenticate('signup', {
        successRedirect : '/verify', 
        failureRedirect : '/signup', 
        failureFlash : true,
        session: false
    })(req, res, next);
};

PASSPORT.JS

const config = require("../config/config");


const LocalStrategy   = require('passport-local').Strategy;
const uuidv4 = require('uuid/v4');



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


module.exports = function(passport) {

passport.use('signup', new LocalStrategy({
      usernameField: 'email',
      passReqToCallback : true
    },
    function(req, email, password, done) {
      User.findOne({ email: req.body.email }, function(err, existingUser) {
        if(err){
          console.log(err);
        }
        if (existingUser) {
          return done(null, false, {message: 'An account with that email address already exists.'});
        }

        var companyID = uuidv4();
        // edit this portion to accept other properties when creating a user.
        var user = new User({
          email: req.body.email,
          password: req.body.password, // user schema pre save task hashes this password
          role: config.defaultRole,
          companyID: companyID
        });

        user.save(function(err) {
          if (err) return done(err, false, {message: 'Error saving user.'});
          return done(null, user, {message: 'Welcome, time to get all setup now!'});
        });
      });
  })
);

};

Если есть другиекод нужен просто спросите, и я добавлю его в ОП.Заранее спасибо!

...