node.js快速路由:某些路由无效,未定义的路由有效

时间:2019-08-01 07:50:26

标签: node.js express

// routes/index.js

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

...

router.use('/super', require('./super'));


module.exports = router;
// routes/super/index.js

const router = require("express").Router();
const Song = require('../../../../models/Song');

router.use("*", require("../../../middlewares/auth"));

router
  .use("*", ({ user: { role } }, res, next) => {
    console.log(role);

    if (role !== 9) {
      return res.status(404).send(); // secret path
    } else {
      next();
    }
  })
  .get("/front", (req, res) => {
    // It doesn't work!
    console.log("work!");
    res.json({ test: "test" });
  })
  .get("/", ({ query: { keyword } }, res) => {
    // It works.
    Song.find(...querys)
      .then(docs => {
        res.json(docs);
      })
      .catch(err => {
        ...
      });
  })
  .patch("/:songID/tag", ({ params: { songID }, body: { value } }, res) => {
    // It works.
  })
  .patch("/:songID/rate", ({ params: { songID }, body: { value } }, res) => {
    // It works.
  })
  .patch("/:songID/title", ({ params: { songID }, body: { value } }, res) => {
    // It works.
  });

module.exports = router;

有两个问题。

  1. get '/front.'

    以外的所有路由(获取和修补程序)均有效

    get '/front'响应为null,但200,并且每个中间件都将被忽略。

  2. 我从未定义的路由会像get '/front'一样响应200。

    get '/back'未定义,但响应为200。

我认为会有一个小错误,但是我找不到。 当然,欢迎您提出问题以外的任何反馈意见。

谢谢

2 个答案:

答案 0 :(得分:0)

尝试将next()放在else函数之外。请显示您如何在失眠/邮递员中执行它们。遵循快递惯例,使用

答案 1 :(得分:0)

我找到了原因。 很简单,我很尴尬。

文件routes/index.js具有端点GET /:artist/:title

端点绑定在router.use('/super', require('./super'))之前。

因此,当我请求GET super/back时,将运行GET /:artist/:title的回调。

这意味着我的服务器尝试查找“ super”演唱的歌曲。

我的数据库中没有名为“ super”的歌手。

因此,我的状态为200。