【问题标题】:express.Router hitting 404 instead of route when separated in own filesexpress.Router 在自己的文件中分离时命中 404 而不是路由
【发布时间】:2020-10-12 15:38:45
【问题描述】:

我无法理解奇怪的 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(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);

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

ordersRoutes.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.js express routes


    【解决方案1】:

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

    【讨论】:

    • 谢谢,但是如果没有其他匹配(它设置为最后一个),不应该只命中 404 路由吗?正如我所提到的,当我使用更扁平的路由结构时,它会起作用。
    猜你喜欢
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2021-09-07
    • 1970-01-01
    • 2021-06-14
    • 2014-08-13
    相关资源
    最近更新 更多