Я получаю 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!'});
});
});
})
);
};
Если есть другиекод нужен просто спросите, и я добавлю его в ОП.Заранее спасибо!