首页 > 解决方案 > 尽管在 package.json 中传递了 --single 标志,但手动输入 URL 或刷新时,page.js 带有细长的“未找到请求的 URL”

问题描述

我是整个 Javascript 和 svelte 生态系统的新手,我正在尝试使用 svelte.js 构建一个应用程序并使用烧瓶来服务它。问题是我The requested URL was not found手动输入路径或刷新页面时遇到的问题。尽管在 package.json 中传递了 --single 标志,但仍会发生这种情况。奇怪的是,我只有在路由有相关参数时才会遇到这个问题,例如。/article/:id. 但是,如果我手动输入路径/article或刷新它,则没有问题。

这是 package.json 的片段

{
  "name": "svelte-app",
  "version": "1.0.0",
  "scripts": {
    "build": "rollup -c",
    "dev": "rollup -c -w",
    "start": "sirv public --single",
    "start:dev": "sirv public --dev --single"
  },
  "devDependencies": {
    "rollup": "^2.3.4",
    "rollup-plugin-livereload": "^2.0.0",
  },
  "dependencies": {
    "gridjs": "^5.0.2",
  }
}

这是我的 App.svelte 文件的片段

<script>
  import {onMount} from 'svelte';
  import page from 'page';
  import Home from './pages/Home.svelte';
  import ArticleOverview from './pages/ArticleOverview.svelte';
  import SingleArticle from './pages/SingleArticle.svelte';

  let current;
  let params;

  onMount(async () => {
        const res = await fetch(`/some_api`);
        const outcome = await res.json().then((outputDetails) => {
        console.log(outputDetails);
      });
    });

  page('/', () => (current = Home));
  page('/article', () => (current = ArticleOverview));
  page('/article/:id', 
    (ctx, next) => {
      params = ctx.params
      next()
    },
    () => (current = SingleArticle));
    page('/*', () => (current = NotFound));

    page.start();
</script>

<svelte:component this="{current}" params="{params}"/>

标签: javascriptsingle-page-applicationsvelterollupjspage.js

解决方案


问题在于烧瓶路线。我添加了一条额外的路线,它奏效了。

以前的路线:

@authoring.route('/', defaults={'path': ''})
    @authoring.route('/<path:path>')
    @authoring.route('/<string:path>')
    @authoring.route('/<path:path>')
    @authenticated_view
    def catch_all(path):
        return authoring.send_static_file("index.html")

添加了以开头的路线/article/<path:path>

@authoring.route('/', defaults={'path': ''})
    @authoring.route('/<path:path>')
    @authoring.route('/<string:path>')
    @authoring.route('/<path:path>')
    @authoring.route('/workspace/<path:path>')
    @authenticated_view
    def catch_all(path):
        return authoring.send_static_file("index.html")

不知何故,图像没有加载,但应该不是一个大问题。


推荐阅读