Node.js express.Router在自己的文件中分离时点击404而不是路由
我无法理解奇怪的express.Router()行为。 我决定整理我的路线,以实现更好的API版本控制。 如果我保持下面这样的简单结构,一切都会按预期进行: app.jsNode.js express.Router在自己的文件中分离时点击404而不是路由,node.js,express,routes,Node.js,Express,Routes,我无法理解奇怪的express.Router()行为。 我决定整理我的路线,以实现更好的API版本控制。 如果我保持下面这样的简单结构,一切都会按预期进行: app.js app.use('/v1', v1); // catch 404 and forward to error handler app.use(function (req, res, next) { const err = new Error('Not Found'); err.status = 404; next(
app.use('/v1', v1);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
const err = new Error('Not Found');
err.status = 404;
next(err);
});
const express = require('express');
const router = express.Router();
const auth = require('../middleware/auth');
const OrderController = require('../controllers/OrderController');
module.exports = router;
// routes for endpoint
// hostname/v1/orders/*
router.post( '/orders', auth.isUser, OrderController.create);
router.get( '/orders', auth.isUser, OrderController.getAll);
router.get( '/orders/:id', auth.isUser, OrderController.get);
router.put( '/orders/:id', auth.isEmployee, OrderController.update);
const router = express.Router();
const ordersRoutes = require('./ordersRoutes');
module.exports = router;
router.use( '/orders', ordersRoutes );
v1.js(api版本/api索引文件)
但如果我将这些路由移动到一个单独的文件中,请按如下方式导出路由器并导入它:
ordersRoutes.js
app.use('/v1', v1);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
const err = new Error('Not Found');
err.status = 404;
next(err);
});
const express = require('express');
const router = express.Router();
const auth = require('../middleware/auth');
const OrderController = require('../controllers/OrderController');
module.exports = router;
// routes for endpoint
// hostname/v1/orders/*
router.post( '/orders', auth.isUser, OrderController.create);
router.get( '/orders', auth.isUser, OrderController.getAll);
router.get( '/orders/:id', auth.isUser, OrderController.get);
router.put( '/orders/:id', auth.isEmployee, OrderController.update);
const router = express.Router();
const ordersRoutes = require('./ordersRoutes');
module.exports = router;
router.use( '/orders', ordersRoutes );
v1.js
app.use('/v1', v1);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
const err = new Error('Not Found');
err.status = 404;
next(err);
});
const express = require('express');
const router = express.Router();
const auth = require('../middleware/auth');
const OrderController = require('../controllers/OrderController');
module.exports = router;
// routes for endpoint
// hostname/v1/orders/*
router.post( '/orders', auth.isUser, OrderController.create);
router.get( '/orders', auth.isUser, OrderController.getAll);
router.get( '/orders/:id', auth.isUser, OrderController.get);
router.put( '/orders/:id', auth.isEmployee, OrderController.update);
const router = express.Router();
const ordersRoutes = require('./ordersRoutes');
module.exports = router;
router.use( '/orders', ordersRoutes );
我在每个订单路径上都点击了404,这很奇怪,因为与其他文件相同的方法效果很好(我对它们进行了多次比较…:()。我的假设是,这与太多路由器实例或可能的路由排序有关,但我无法指出。非常感谢任何想法。提前感谢!在你的app.js中,下一步(错误)函数强制其他路由响应404错误。您应该从函数中删除err参数。谢谢,但404路由不应该只有在没有其他匹配的情况下才被命中(设置为最后一个)?正如我提到的,当我使用更平坦的路由结构时,它是有效的。