gpt4 book ai didi

api - 如何设置 Sails.js 路由以在前端使用 SPA 支持 pushstate

转载 作者:行者123 更新时间:2023-12-04 14:13:10 25 4
gpt4 key购买 nike

如何设置 SailsJS 路由以支持 pushstate,但仍然能够服务以 /api 为前缀的请求以及服务静态 Assets ?

使用:

  • 主干 1.x 与 pushState: true
  • 帆 0.10.x

  • 来自此的建议解决方案 thread是使用 /*通配符并将所有内容重定向到索引 View 。

    /path/to/app/config/routes.js
    '/*': {
    view: 'index'
    }

    问题是这会将所有内容重定向到 index.html 。包括静态文件 Assets ,express.static 中间件似乎没有效果,这条路线以某种方式优先。

    此外,下面的这个前缀没有任何影响,因为上面的路由优先,但是如果我只是删除通配符,即 '/': { view: 'index' } 前缀有效。

    /path/to/app/config/blueprint.js
    module.exports.blueprints = {
    ...
    prefix: '/api',
    ...
    }

    显然,这似乎不是 SailsJS 的核心问题,而是我对 expressjs 路由器的最少了解,因为这就是 Saisjs 正在使用的。

    从理论上讲,我可以明确地列出所有 Assets 前缀路由,并有一个 Controller 来服务所有,因为它们是众所周知的和静态的,即 '/js*': { controller: 'AssetsController', action: 'serve' ,依此类推 '/styles*' , '/images*' , '/templates*' , '/fonts*' ,但我真的很犹豫这样做,我希望有更好的实践解决方案。

    这也不能解决这条路线 /api通配符问题 '/*'

    最佳答案

    如果您愿意使用 development version of Sails from GitHub ,您可以使用 skipRegex 路由选项让您的通配符路由忽略 API 请求,以及 skipAssets 让它忽略 Assets URL 的选项:

    '/*' : {view: 'index', skipAssets: true, skipRegex: /^\/api\/.*$/}

    否则,您可以创建一个 Controller 来为您的 View 提供服务,并添加代码以跳过操作代码中无意匹配的 URL:
    // api/controllers/StaticController.js
    module.exports = {
    index: function(req, res, next) {
    if (req.path.match(/\..*/g) || req.path.match(/^\/api\/.*$/)) {
    return next();
    }
    return res.view('index');
    }
    }

    然后在 /config/routes.js :
    '/*': 'StaticController.index'

    ......

    关于api - 如何设置 Sails.js 路由以在前端使用 SPA 支持 pushstate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22770035/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com