Express+Angular,总是为html请求发送索引文件,而不是api请求

Express + Angular, always send index file for html requests, not api requests

本文关键字:请求 文件 api 索引 html Express+Angular      更新时间:2023-09-26

我正试图让我的express应用程序始终返回"index.html",这是包含我的angular应用程序scaffold的布局文件。

在我的angular应用程序中,当我在路由"/home"时,我希望能够刷新页面,所以要做到这一点,我需要我的路由器返回index.html。

对于我的html路由,我使用以下内容-我的所有模板(home.html)都存储在/templates目录中:

var express = require("express"),
    router = express.Router(),
    path = require("path"),
    root = path.join(__dirname, "../../");
router.use(express.static(__dirname + "/../../templates"));
router.get("*", function(req, res) {
    //Response options
    var options = {
        root: root, 
    };
    res.sendFile("layouts/index.html", options);
});

这显然影响了我的REST API请求,因为它们不会发回index.html.

例如,我有一个/islands api路由,它从我的mongo数据库返回"Island"对象。

var router = require("express").Router(),
    Island = require("../../model/island");
router.get("/", function (req, res, next) {
    Island.findOne({user_id: req.user.email}, function (error, island) {
        if (error) { return next(error); }
        return res.json(island);
    });
});

这是现在返回我的index.html.

以下是我如何使用上面的控制器,以防有帮助。

app.use(require("./controllers/api/static")); //Returning static assets
app.use(require("./controllers/api/views")); //This is where the get route for returning .index.html is stored
app.use("/api/island",require("./controllers/api/island"));  

我有点困惑,怎么才能让index.html只返回html请求,而不返回对我的api的请求。

检查路由的顺序,将api路由放在sendfile路由之前。