跳过 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()
匹配的文件。这就是你控制它的方式。不要将不应静态提供的内容放入该文件夹中。
我的 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()
匹配的文件。这就是你控制它的方式。不要将不应静态提供的内容放入该文件夹中。