Как правильно импортировать модули экспресс-маршрута? - PullRequest
0 голосов
/ 06 февраля 2019

Я создал проект с express-generator.В моем каталоге маршрутов у меня есть 2 файла: index.js и users.js, и about.js, который обрабатывает маршрут /about.

Доступ к /about приводит к Error 404 : Page Not found.

При добавлении обработчика для /about в app.js ошибка исчезла.

./app.js:

var     createError = require('http-errors');
var     express = require('express');
var     path = require('path');
var     cookieParser = require('cookie-parser');
var     logger = require('morgan');

var     indexRouter = require('./routes/index')
var     aboutRouter = require('./routes/about');
var     usersRouter = require('./routes/users');

var     app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/about', aboutRouter);
app.use('/users', usersRouter);


// 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;

./route/index.js:

var express = require('express');
var app = express();
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
        res.json( {
                message : "Home Page (Requeste for list)",
                method : req.method,
                Succes : "True"
        });
  // res.render('index', { title: 'Express' });
})

module.exports = router;

./routes/about.js:

var express = require('express');
var router = express.Router();

router.get('/about', function(req, res) {
    res.send('im the about page!');
});
router.post('/about', function(req, res) {
    res.send('im the about page!');
});


module.exports = router;

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Перепишите ваш router/about.js как этот

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
    res.send('im the about page!');
});
router.post('/', function(req, res) {
    res.send('im the about page!');
});


module.exports = router;

Поскольку в вашем app.js вы уже объявляете префикс /about в строке 24, поэтому вам не придется делать это снова в router/about.js

0 голосов
/ 06 февраля 2019

Происходит следующее: в app.js вы задали корень для about router как "/ about", а внутри "about.js" вы снова указали router.get('/about'), что приведет к получению доступа к маршруту aboutнеобходимость использовать /about/about (вы можете попробовать, прежде чем это исправить).Чтобы получить ожидаемый результат, вы должны использовать router.get(´/´) внутри about.js и в app.js сохранить как есть app.use('/about', aboutRouter);.Вы можете взглянуть на https://expressjs.com/en/guide/routing.html для получения дополнительной информации.С уважением.

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