首页 > 解决方案 > express.Router 在自己的文件中分离时命中 404 而不是路由

问题描述

我无法理解奇怪的 express.Router() 行为。我决定整理我的路线以启用更好的 API 版本控制。如果我保持如下更简单的结构,一切都会按预期工作:

应用程序.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);
});

v1.js(api版本/api索引文件)

module.exports = router;
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);

但是如果我将这些路由移动到单独的文件中,请导出路由器并将其导入如下:

订单路由.js

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

v1.js

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

module.exports = router;

router.use( '/orders',     ordersRoutes         );

我在每个订单路线上都点击了 404,这很奇怪,因为与其他文件相同的方法工作得很好(我比较了很多次...... :( )。我的假设是它与路由器的太多实例有关,或者可能路线的排序,但我不能指望它。任何想法都非常感谢。在此先感谢!

标签: node.jsexpressroutes

解决方案


在您的 app.js 中, next(err) 函数强制其他路由响应 404 错误。您应该从函数中删除 err 参数。


推荐阅读