304状态代码显示在Node Express应用程序中除根路径以外的所有路径

时间:2019-03-24 23:22:28

标签: node.js express

我用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");
};

1 个答案:

答案 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("/", ...);