node.js - 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个问题。
每条路线(get 和 patch)都有效,除了
get '/front.'
get '/front'
响应 null 但 200 并且每个中间件都被忽略。我从未定义的路由响应 200 就像
get '/front'
.get '/back'
未定义但响应 200。
我想会有一个小错误,但我找不到它。当然,也欢迎任何问题之外的反馈。
谢谢
解决方案
我找到了一个理由。这太简单了,我很尴尬。
该文件routes/index.js
有一个端点GET /:artist/:title
。
端点之前绑定router.use('/super', require('./super'))
。
所以,当我请求时, runGET super/back
的回调。GET /:artist/:title
这意味着我的服务器试图找到“超级”演唱的歌曲。
我的数据库中没有名为“super”的歌手。
因此,我得到了状态为 200 的空值。
推荐阅读
- python - HTML 和 Flask POST 图像上传停止工作
- xcode - 尝试从 cmake 文件夹生成 Xcode 项目时,我收到与 Xcode 新构建系统相关的错误。任何可能的解决方案?
- jwt - 在 Prestashop 中安装第三方库
- redis - 如何在redis中获取用户的所有密钥
- regex - 正则表达式 MySQL 查找由标点符号分隔的单词
- javascript - 导航栏在响应模式下中断
- asp.net-mvc - 如何发布/上传 ASP.NET MVC 5 网站
- python - 矩阵的python numpy平方不起作用
- firebase - 如何在firestore中显示收藏列表?
- sklearn-pandas - 预期 2D 数组,得到 1D 数组。如何在线性回归中解决它?