首页 > 解决方案 > node.js express route:某些路由不起作用&未定义的路由起作用

问题描述

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

有2个问题。

  1. 每条路线(get 和 patch)都有效,除了get '/front.'

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

  2. 我从未定义的路由响应 200 就像get '/front'.

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

我想会有一个小错误,但我找不到它。当然,也欢迎任何问题之外的反馈。

谢谢

标签: node.jsexpress

解决方案


我找到了一个理由。这太简单了,我很尴尬。

该文件routes/index.js有一个端点GET /:artist/:title

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

所以,当我请求时, runGET super/back的回调。GET /:artist/:title

这意味着我的服务器试图找到“超级”演唱的歌曲。

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

因此,我得到了状态为 200 的空值。


推荐阅读