почему меня всегда перенаправляют на «/», если я делаю GET запрос на «/ продавать» с кодом состояния http 302? - PullRequest
0 голосов
/ 23 января 2020

ЕСЛИ я не вошел в систему и сделал запрос "GET" на "/ sell", я перенаправлен на "/ user / login", который работает соответственно. Но если я вошел в систему и сделал запрос GET на "/ sell "Я всегда перенаправлен на
" / "т.е. на домашнюю страницу вместо страницы" / sell ". Что мне делать, чтобы получить доступ только к странице" / sell ", если я вошел в систему?. Вот фрагменты кода, которые вы, вероятно, можете нужно. Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще. Заранее спасибо.

/ маршруты / продажа. js

const express = require('express');
const router = express.Router();
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({extended:false}); 
const Product = require('../models/product');


router.get('/sell', isLoggedIn, (req, res, next) => {
    res.render('sell',{title: 'Home|Sell', success: req.session.success,  errors: req.session.errors, csrfToken: req.csrfToken()});
    req.session.success = null;
    req.session.errors = null;
})



router.post('/book_upload', isLoggedIn, (req, res, next) => {
    req.check('name')
     .isLength({min:3}).withMessage('Name must be of 3 characters long.')
     .matches(/^[A-Za-z\s]+$/).withMessage('Name must be alphabetic.');
    req.check('phone')
     .isLength({min:10,max:10}).withMessage('Phone number must be of 10 digits.');
    req.check('book_name')
     .isLength({min:3}).withMessage('Book Name must be of 3 characters long.')
     .matches(/^[A-Za-z\s]+$/).withMessage('Book Name must be alphabetic.');
    req.check('book_price')
     .isNumeric().withMessage('Price must be numeric.');
    req.check('description')
     .isLength({min:3}).withMessage('Description must be of 3 characters long.')
     .matches(/^[<A-Za-z0-9></A-Za-z0-9>\s]+$/).withMessage('Please write appropriate description.')
    req.check('faculty')
     .isLength({min:3}).withMessage('Faculty must be of 3 characters long.')
     .matches(/^[A-Za-z\s]+$/).withMessage('Faculty must be alphabetic.')

    var errors = req.validationErrors();
    if (errors){
        req.session.errors = errors;
        req.session.success = false;
    } else {
        req.session.success = true;

        var item = {
            name: req.body.name,
            phone: req.body.phone,
            book_name: req.body.phone,
            book_price: req.body.price,
            description: req.body.description,
            faculty: req.body.faculty
        };
       var data = new Product(item);
       data.save();
    }
    res.redirect('/sell');
})


function isLoggedIn (req, res, next){
    if (req.isAuthenticated()){
        return next();
    }
    req.flash('error', 'Please Login to Continue')
    res.redirect('/user/login');
}


module.exports = router;

и приложение. js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var expressHbs =  require('express-handlebars');
var mongoose = require('mongoose');
var session = require('express-session');
var passport = require('passport');
var flash = require('connect-flash');
var validator = require('express-validator');
// var MongoStore = require('connect-mongo')(session);

mongoose.connect('mongodb+srv://username:password@firstdatabase-ytrfr.mongodb.net/test?retryWrites=true&w=majority',{
  useNewUrlParser: true,
  useUnifiedTopology: true
})
  .then(()=>console.log('Connected to the database'))
  .catch(err=> console.log('could not connect.',err.message))



// passport
require('./config/passport');

var indexRouter = require('./routes/index');
var userRouter = require('./routes/user');
var sellRouter = require('./routes/sell');
var app = express();



// view engine setup
app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs'}))
app.set('view engine', '.hbs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(validator());
app.use(session({
  secret: 'blahblah',
  resave: false,
  saveUninitialized: false,
}))
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname, 'public')));

app.use((req, res, next) => {
  res.locals.login = req.isAuthenticated();
  res.locals.session = req.session;
  next();
})

app.use('/', indexRouter);
app.use('/', userRouter);
app.use('/', sellRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});


// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

и sell.hbs

<section class="my_account_area pt--80 pb--55 bg--white">
    <div class="container">
        <div class="row">
            <div class="col-lg-6 col-12">
                    <div class="my__account__wrapper">
                        {{# if success}}
                            <section class="success">
                                <h2>Form submitted!</h2>
                            </section>
                        {{else}}
                        {{# if errors}}
                            <div class="alert alert-danger">
                                <section class="errors">
                                    <ul>
                                        {{# each errors}}
                                            <li>{{ this.msg }}</li>
                                        {{/each}}
                                    </ul> 
                                </section>
                            </div>   
                         {{/if}}
                        <h3 class="account__title">Fill Up the Information of Book</h3>
                        <form action="/book_upload" method="post">
                            <div class="account__form">
                                <div class="input__box">
                                    <label>Your Name <span>*</span></label>
                                    <input type="text" id="name" name="name">
                                </div>
                                <div class="input__box">
                                    <label>Phone No. <span>*</span></label>
                                    <input type="number" id="phone" name="phone">
                                </div>
                                <div class="input__box">
                                    <label>Name of book <span>*</span></label>
                                    <input type="text" id="book_name" name="book_name">
                                </div>
                                <div class="input__box">
                                    <label>Price of Book<span>*</span></label>
                                    <input type="number" id="book_price" name="book_price">
                                </div>
                                <div class="input__box">
                                    <label>Description of Book<span>*</span></label>
                                    <input type="text" id="description" name="description" placeholder="e.g. To study in 1st year 1st part">
                                </div>
                                <div class="input__box">
                                    <label>Faculty<span>*</span></label>
                                    <input type="text" id="faculty" name="faculty">
                                </div>
                                <input type="hidden" name="_csrf" value="{{ csrfToken }}">
                                <div class="form__btn">
                                    <button type="submit">Upload</button>
                                </div>
                            </div>
                        </form>
                    </div>
                    {{/if}}
                </div>
        </div>
    </div>
</section>

1 Ответ

1 голос
/ 23 января 2020

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

app.use('/', indexRouter);
app.use('/', userRouter);
app.use('/', sellRouter);

на

app.use('/', sellRouter);
app.use('/', indexRouter);
app.use('/', userRouter);

Это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...