最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Express.js路由没有意义

IT培训 admin 5浏览 0评论

Express.js路由没有意义

我正在开发Express.js应用程序,我认为我在理解多层路由的细微差别时遇到了麻烦。我的应用程序的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');

//new stuff

const routes = require('./routes');

var app = express();

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

// middleware functions required
app.use(logger('dev'));  //handles logging
app.use(express.json()); //JSON payload parser
app.use(express.urlencoded({ extended: false })); //urlencoded payload parser
app.use(cookieParser());

//content routes
app.use('/jquery', express.static(__dirname + '/node_modules/jquery/dist/'));
app.use('/', express.static(path.join(__dirname, 'public'))); //static files (css and other js files)
app.use('/', routes); //everything else (see /routes/index.js)

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

如代码中所示,在一堆静态文件和默认的中间件设置后进行记录,诸如此类,app.use('/',routes);声明,将其移交给一个index.js文件/ routes文件夹如下:

//index.js
//main router entry point, sets up all route modules

//instantiate the express.Router class
const express = require('express');
const router = express.Router();

//import our route modules
const indexRouter = require('./indexRouter');
const resetRouter = require('./resetRouter');
const enrollRouter = require('./enrollRouter');

//map individual route modules to their respective routes
router.use('/', indexRouter);
router.use('/reset', resetRouter);
router.use('/enroll(/*)?', enrollRouter);

module.exports = router;

三个router.use行在所示的同一目录中调用各个路由文件。前两个是简单的获取路线。第三个(router.use('/ enroll(/ *)?',enrollRouter);)通过enrollRouter.js文件同时具有get和post组件,如下所示:

//enrollRouter.js

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

const { getEnroller }  = require('../controllers/enrollGetController');
const { postEnrollment } = require('../controllers/enrollPostController');

router.post(/^(\/enroll\/new)/i, postEnrollment);
//router.post('/', postEnrollment);
router.get('/', getEnroller);

module.exports = router;

这里是有趣的地方。我正在使用邮递员向“ / route / new”发出发布请求。如果上面代码中的post路由的路由字符串设置为'/',则一切正常,并且调用enrollPostController.js返回适当的内容。但是,如果我将路由字符串设置为'/ enroll / new'(我正在调用的路径...不管是字符串还是正则表达式都没有关系),则应用中会出现404错误代码。 js被称为。

我不关注正在发生的事情。我的印象是,在router.get或router.post调用开始处的字符串表示要与定义为下一个参数的回调匹配的路径。如果路径明确是指定的路径,为什么我会得到404?

我的思考方式是,当/ enroll / new发布请求进入时,app.js应该将所有匹配'/'的路由切换到index.js。然后index.js应该移交给enrollRouter,因为路由匹配'/ enroll(/ *)?'。最后,enrollRouter.js应该调用在../controllers/enrollPostController中定义的postEnrollment,因为路由与“ / enroll / new”匹配。但这不是那样的。

有人可以开导吗?或填补我的理解的空缺?

这是enrollPostController.js中的代码

//enrollPostController.js

module.exports = {
  postEnrollment(erq, res) {
    //at this point we have the form submission data.
    console.log(erq.body);
    res.send("received form submission!");
  },
};
回答如下:

尝试以下操作:

路由/ index.js

router.use('/enroll', enrollRouter);

路由/ enrollRouter.js

router.post('/new', postEnrollment);

Express.js路由没有意义

我正在开发Express.js应用程序,我认为我在理解多层路由的细微差别时遇到了麻烦。我的应用程序的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');

//new stuff

const routes = require('./routes');

var app = express();

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

// middleware functions required
app.use(logger('dev'));  //handles logging
app.use(express.json()); //JSON payload parser
app.use(express.urlencoded({ extended: false })); //urlencoded payload parser
app.use(cookieParser());

//content routes
app.use('/jquery', express.static(__dirname + '/node_modules/jquery/dist/'));
app.use('/', express.static(path.join(__dirname, 'public'))); //static files (css and other js files)
app.use('/', routes); //everything else (see /routes/index.js)

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

如代码中所示,在一堆静态文件和默认的中间件设置后进行记录,诸如此类,app.use('/',routes);声明,将其移交给一个index.js文件/ routes文件夹如下:

//index.js
//main router entry point, sets up all route modules

//instantiate the express.Router class
const express = require('express');
const router = express.Router();

//import our route modules
const indexRouter = require('./indexRouter');
const resetRouter = require('./resetRouter');
const enrollRouter = require('./enrollRouter');

//map individual route modules to their respective routes
router.use('/', indexRouter);
router.use('/reset', resetRouter);
router.use('/enroll(/*)?', enrollRouter);

module.exports = router;

三个router.use行在所示的同一目录中调用各个路由文件。前两个是简单的获取路线。第三个(router.use('/ enroll(/ *)?',enrollRouter);)通过enrollRouter.js文件同时具有get和post组件,如下所示:

//enrollRouter.js

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

const { getEnroller }  = require('../controllers/enrollGetController');
const { postEnrollment } = require('../controllers/enrollPostController');

router.post(/^(\/enroll\/new)/i, postEnrollment);
//router.post('/', postEnrollment);
router.get('/', getEnroller);

module.exports = router;

这里是有趣的地方。我正在使用邮递员向“ / route / new”发出发布请求。如果上面代码中的post路由的路由字符串设置为'/',则一切正常,并且调用enrollPostController.js返回适当的内容。但是,如果我将路由字符串设置为'/ enroll / new'(我正在调用的路径...不管是字符串还是正则表达式都没有关系),则应用中会出现404错误代码。 js被称为。

我不关注正在发生的事情。我的印象是,在router.get或router.post调用开始处的字符串表示要与定义为下一个参数的回调匹配的路径。如果路径明确是指定的路径,为什么我会得到404?

我的思考方式是,当/ enroll / new发布请求进入时,app.js应该将所有匹配'/'的路由切换到index.js。然后index.js应该移交给enrollRouter,因为路由匹配'/ enroll(/ *)?'。最后,enrollRouter.js应该调用在../controllers/enrollPostController中定义的postEnrollment,因为路由与“ / enroll / new”匹配。但这不是那样的。

有人可以开导吗?或填补我的理解的空缺?

这是enrollPostController.js中的代码

//enrollPostController.js

module.exports = {
  postEnrollment(erq, res) {
    //at this point we have the form submission data.
    console.log(erq.body);
    res.send("received form submission!");
  },
};
回答如下:

尝试以下操作:

路由/ index.js

router.use('/enroll', enrollRouter);

路由/ enrollRouter.js

router.post('/new', postEnrollment);

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论