Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js express.Router在自己的文件中分离时点击404而不是路由_Node.js_Express_Routes - Fatal编程技术网

Node.js express.Router在自己的文件中分离时点击404而不是路由

Node.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(

我无法理解奇怪的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);
});
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路由不应该只有在没有其他匹配的情况下才被命中(设置为最后一个)?正如我提到的,当我使用更平坦的路由结构时,它是有效的。