У меня практически идентичная проблема с этим другим переполнением стека thread , однако ни одно из приведенных решений не работает.
Вот сообщение об ошибке, которое я получаю при попытке входа в систему:
TypeError: req.flash is not a function
at index.js:151:5
Вот важные биты из маршрутов index.js file
router.get("/login", function(req, res) {
res.render("login", {message: req.flash('error')});
});
// login Process
router.post("/login", function(req, res, next) {
passport.authenticate('local', {
successRedirect:'customer/dashboard',
failureRedirect:'/login',
failureFlash: true
})(req, res, next);
});
**// this where im getting an error**
module.exports = router;
Итак, ошибка указывает на router.post, который вызывает LocalStrategy в моем passport.js файле:
module.exports = function(passport) {
//LocalStrategy
passport.use(new LocalStrategy(function(email, password, done) {
let query = {email: email};
// checking the name in the database against the one submitted on the form
Customer.findOne(query, function(err, customer) {
if (err) throw err;
if (!customer) {
return done(null, false, { message : 'No such password', type : 'error' });
}
//Match password
bcrypt.compare(password, customer.password, function(err, isMatch) {
if (err) throw err;
if (isMatch) {
return done(null, customer);
} else {
return done(null, false, { message : 'No such password', type : 'error' });
// if the password isnt an matc return wrong password
}
});
});
})
);
}
passport.serializeUser(function(customer, done) {
done(null, customer.id);
});
passport.deserializeUser(function(id, done) {
Customer.findById(id, function(err, customer) {
done(err, customer);
});
});
и мой login.ejs файл имеет код, указанный в документации:
<% if (message.length > 0) { %>
<div class="alert alert-danger"><%= message %></div>
<% } %>
Я проверял все, включая настройку зависимостей в моем файле app.js:
// Passport Config
require('./config/passport')(passport);
// Passport Middleware
app.use(passport.initialize());
app.use(passport.session());
app.use(cookieparser());
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
app.listen(3000, function() {
console.log('server is running');
});
app.use(flash());
app.use(routes);
Пожалуйста, помогите! Я потратил около 11 часов на эту ошибку.