【问题标题】:Elm navigation prevent cannot GET榆树导航防止不能GET
【发布时间】:2016-10-14 21:25:43
【问题描述】:

我一直在玩 Elm 导航包,目前我正在使用 Hop 框架,我想知道是否有办法防止 cannot GET /<url> 消息在 url 前面没有井号(例如:#<url>)。

【问题讨论】:

    标签: elm


    【解决方案1】:

    我感觉这可能是服务器配置问题。为了使#-less url 起作用,您需要将服务器配置为提供相同的.html,而不管请求 URL 是什么。提供服务后,您的 Elm 应用程序可以从那里加载和获取它。

    【讨论】:

    • 那我的感觉就确定了,我一到家就努力让它工作
    【解决方案2】:

    为了补充 Peter Szerzo 的答案,我发现 an issue at the Github page of browser-sync 页面与我遇到的问题大致相同。解决方法如下:

    const modRewrite = require("connect-modrewrite");
    
    gulp.task("serve", () => {
        browserSync.init(null, {
            middleware: [
                modRewrite([
                    "!\\.\\w+$ /index.html [L]"
                ]),
            ]
        }
    }
    

    如果您打算使用 Apache 或 Nginx,您当然需要使用不同的解决方案。这是特定于浏览器同步的。

    更新

    我遇到了另一个问题,上面的解决方案不起作用,因为它会再次从不同的位置获取项目。例如:手动导航到/blog/1 可以正常工作,因为在更改到该位置时没有任何 HTTP 请求,但是在重新加载页面时,页面将从/blog 获取文件,上面的解决方案就是这样做的不处理。这就是我解决后一个问题的方法:

    middleware: [
        (req, res, next) => {
            const splitRequestUrl = req.url.split("/");
            const fileName = splitRequestUrl[splitRequestUrl.length - 1];
    
            //I have a seperate paths file
            //Change paths.serve to whatever folder you want to specify as your base folder
            if (fs.existsSync(path.join(process.cwd(), paths.serve, fileName)))
                req.url = `/${fileName}`;
            else
                req.url = "/";
    
            next();
        }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多