我用Express编写了MVC模式的CRUD API。
将模板应用于CRUD API时出现问题。
我正在使用索引视图作为根路径。但是,无论索引视图中的链接如何,都将显示相同的视图。我获得304 status code
的所有访问权,而不是根路径。
有人可以帮助我找到问题的根源吗?
app.js
...
const post = require("./routes/post");
app.use("/", (req, res) => {
res.render("index");
});
app.use("/posts", post);
...
index.pug
doctype html
html
head
meta(charset='UTF-8')
body
a(href='/posts/new') new
路线
const postsController = require("../controller/posts_controller");
router.get("/new", postsController.post_new);
控制器
exports.post_new = (req, res, next) => {
res.render("new");
};
答案 0 :(得分:2)
Express按照定义的顺序检查路由,并使用第一个处理程序,其路由与传入请求的路径匹配。由于您将根路由("/"
)放在顶部,并且所有路由(至少)都与根路由匹配,因此它将匹配并处理任何传入的请求。
要解决此问题,您可以将根路由的定义移至app.js的末尾。例如:
const post = require("./routes/post");
app.use("/posts", post);
app.use("/", (req, res) => {
res.render("index");
});
通常,您应该在子路径的父路径之前定义子路径,并在具有相同位置的变量之前定义具有静态值的路径。因此,一个好的示例示例将是:
app.use("/posts/new", ...);
app.use("/posts/:id", ...);
app.use("/posts", ...);
app.use("/", ...);