// 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;
有两个问题。
除get '/front.'
get '/front'
响应为null,但200,并且每个中间件都将被忽略。
我从未定义的路由会像get '/front'
一样响应200。
get '/back'
未定义,但响应为200。
我认为会有一个小错误,但是我找不到。 当然,欢迎您提出问题以外的任何反馈意见。
谢谢
答案 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。