跳过 API 路线的快速 js 视图

Skip express js view for API routes

我的 API 和网站在同一个 Express Js 项目中,只需要对网站使用 ejs 视图。 但 API 至 return JSON API 路线不适用。

const app = express();

// For static website
app.use(express.static(path.join(__dirname, "public"), { 
  extensions : ['html']
}));

// API Routes
const bookRoutes = require("./routes/event.route");
app.use("/v1/books", bookRoutes);

// Website
// Set the view engine for dynamic header, footer on website
const ejs = require('ejs');
app.set('view engine', 'ejs');

API

/v1/books

网站

/index.html

如何跳过我的 API 路线的视图引擎并仅应用于 /public 文件夹甚至所选文件?

错误消息,当我在 Postman

中打开 /v1/books
{"message":"Failed to lookup view \"C:\Users\admin\github\test-app\public\v1\books\" in views directory \"C:\Users\admin\github\test-app\views\""}

/books API

应为 JSON
{
 id : 1,
 name : 'book name'
}

首先,路由按照您声明它们的顺序进行匹配。所以,如果你把这个放在第一位:

// API Routes
const bookRoutes = require("./routes/event.route");
app.use("/v1/books", bookRoutes);

首先,然后它将在尝试匹配任何静态路由之前得到处理。但是,这真的不应该成为问题,因为您的 public 文件夹中不应该有任何文件可以匹配 /v1/books/xxx 的请求。

至于 /v1/books 的错误,您必须向我们展示 bookRoutes 的代码是什么。看来错误来自该路由器。 express.static() 不会犯那样的错误。

How can I skip the view engine for my API routes and apply to /public folder only or even for selected files?

app.set('view engine', 'ejs'); 行仅配置了将使用的视图引擎 if/when 一些代码调用 res.render()。在您的 API 请求之一上,视图引擎没有发生任何事情,因为您永远不应该在 API 路由中调用 res.render()。您可能正在调用 res.json()

您的 public 文件夹中应该只有您希望 express.static() 匹配的文件。这就是你控制它的方式。不要将不应静态提供的内容放入该文件夹中。