npm run dev
[email protected] dev
nodemon BackEnd/index.js
[nodemon] 3.1.7
[nodemon] to restart at any time, enter rs
[nodemon] watching path(s): .
[nodemon] watching extensions: js,mjs,cjs,json
[nodemon] starting node BackEnd/index.js
C:UsersFatiihDesktopBulgPayBackEndnode_modulesexpresslibapplication.js:217
throw new TypeError(‘app.use() requires a middleware function’)
^
TypeError: app.use() requires a middleware function
at Function.use (C:UsersFatiihDesktopBulgPayBackEndnode_modulesexpresslibapplication.js:217:11)
at Object. (C:UsersFatiihDesktopBulgPayBackEndindex.js:27:5)
at Module._compile (node:internal/modules/cjs/loader:1469:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
at Module.load (node:internal/modules/cjs/loader:1288:32)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at node:internal/main/run_main_module:28:49
Node.js v20.18.0
[nodemon] app crashed – waiting for file changes before starting…
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at node:internal/main/run_main_module:28:49
Node.js v20.18.0
[nodemon] app crashed – waiting for file changes before starting…
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at node:internal/main/run_main_module:28:49
Node.js v20.18.0
[nodemon] app crashed – waiting for file changes before starting…
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at node:internal/main/run_main_module:28:49
Node.js v20.18.0
[nodemon] app crashed – waiting for file changes before starting…
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at node:internal/main/run_main_module:28:49
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at node:internal/main/run_main_module:28:49
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at node:internal/main/run_main_module:28:49
Node.js v20.18.0
[nodemon] app crashed – waiting for file changes before starting…
My index.js:
const express = require('express');
const session = require('express-session');
const passport = require('passport');
const sequelize = require('./config/database');
const User = require('./models/User');
const authRoutes = require('./routes/auth');
const bankAuth = require('./routes/bankAuth');
require('dotenv').config();
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Конфигуриране на сесията
app.use(session({
secret: process.env.SESSION_SECRET || 'your-secret-key',
resave: false,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
// Сега можеш да използваш bankAuth
app.use(bankAuth);
// Дефинирай основен маршрут (пример)
app.get('/', (req, res) => {
res.send('Welcome to the BulgPay API');
});
// Стартиране на сървъра
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
// Увери се, че bankAuth е валиден маршрутен модул
app.use('/api', bankAuth); // Например, добави префикс за API
// Основен маршрут
app.get('/', (req, res) => {
res.send('Welcome to the BulgPay API');
});
// Middleware
app.use(express.json());
// Тестов рут
app.get('/', (req, res) => {
res.send('Financial App Backend');
});
// Синхронизиране с базата данни и стартиране на сървъра
sequelize.sync({ alter: true })
.then(() => {
console.log('Database connected and synced.');
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
app.use('/api/auth', authRoutes);
const bankAuthRoutes = require('./routes/bankAuth');
app.use(passport.initialize());
app.use('/api/bank', bankAuthRoutes);
const paymentRoutes = require('./routes/payments');
app.use('/api/payments', paymentRoutes);
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
// Използване на Helmet за защита
app.use(helmet());
// Rate Limiting
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 минути
max: 100, // Максимален брой заявки от IP адрес
message: 'Твърде много заявки от този IP адрес. Опитайте отново по-късно.'
});
app.use(limiter);
const logger = require('./config/logger');
// Пример за логване на грешка
app.use((err, req, res, next) => {
logger.error(err.message);
res.status(500).send('Сървърна грешка');
});
My bankAuth.js:
const express = require('express');
const passport = require('passport');
const OAuth2Strategy = require('passport-oauth2').Strategy;
const router = express.Router();
require('dotenv').config();
passport.use('bank', new OAuth2Strategy({
authorizationURL: 'https://example.com/oauth2/authorize', // Временен URL
tokenURL: 'https://example.com/oauth2/token', // Временен URL
clientID: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
callbackURL: process.env.CALLBACK_URL || 'http://localhost:3000/auth/bank/callback'
},
function(accessToken, refreshToken, profile, done) {
// Обработване на профила и токените (може да оставиш празно за сега)
return done(null, profile);
}
));
// Сериялизиране на потребителя в сесията
passport.serializeUser(function(user, done) {
done(null, user);
});
// Десериализиране на потребителя от сесията
passport.deserializeUser(function(user, done) {
done(null, user);
});
// OAuth2 route за стартиране на аутентификацията
router.get('/auth/bank', passport.authenticate('oauth2'));
// Callback route, на който потребителят се връща след успешен login
router.get('/auth/bank/callback',
passport.authenticate('oauth2', { failureRedirect: '/login' }),
function(req, res) {
// Успешен login, пренасочваме потребителя
res.redirect('/');
}
);
// Примерен route за logout
router.get('/logout', function(req, res) {
req.logout(function(err) {
if (err) { return next(err); }
res.redirect('/');
});
});
// Примерен маршрут за аутентикация
router.get('/auth', passport.authenticate('oauth2'));
// Callback маршрут
router.get('/auth/callback',
passport.authenticate('oauth2', { failureRedirect: '/' }),
(req, res) => {
// Успешна аутентикация
res.redirect('/');
}
);
module.exports = passport;
I can’t understand what need to make.