3

(注意,我使用的是 Reagent、Secretary 和 Compojure(以及其他))

我想创建一条路线/sectest/:id,如果我将浏览器指向该路线,我会收到以下错误:

Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:3449/sectest/css/site.css". asdf:1 Refused to execute script from 'http://localhost:3449/sectest/js/app.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

但是,如果我单击浏览器中导航到该路线的链接,它就可以正常工作...

这是相关的代码:

客户端:

(secretary/defroute "/sectest/:id" [id]
  (do
    (js/console.log (str "Hi " id))
    (session/put! :current-page #'my-page)))

服务器端:

(defroutes routes
  (GET "*" [] loading-page) ;this anticipates client-side routing only
  (GET "/cards" [] cards-page)
  (resources "/")
  (not-found "Not Found"))

(def app (wrap-middleware #'routes))

因此,以下链接将我带到my-page,并且控制台打印"Hi asdf"得很好:

[:div [:a {:href "/sectest/asdf"} "SECTEST"]]

但是如果我输入http://localhost:3449/sectest/asdf,我会得到一个错误,而且我似乎无法追踪它。我怀疑这可能与试图查找位于 , 的资源的代码有关/sectest(它不应该),但我无法确认这一点或弄清楚如何使用它......我clojure 的新手,如果我在某些方面非常无知,请原谅,有什么想法吗?

4

1 回答 1

3

看看你的服务器端路由,实际上你只有一个路由:

(GET "*" [] loading-page)    

因为它处理所有后续路线将永远不会触发。订单事项:

(defroutes routes
  (GET "/cards" [] cards-page)
  (resources "/")
  (GET "*" [] loading-page) ;this anticipates client-side routing only
)

以上应该可以解决问题,我删除了 404 路由,因为这应该由前端路由处理。

在您的 SPA 中单击页面链接时,它目前起作用的原因是它将由秘书处理。如果您手动输入 url,您正在重新加载页面,并且请求最初由 compojure 处理。

编辑:

仔细查看后,relative links您的css/js文件html template很可能是这里的罪魁祸首:

/sectest/js/app.js

compojureresources路由不匹配,默认的 catch all 路由loading-page作为css/js文件提供给您的浏览器。因此错误。

对于我的开发环境,我还必须纠正:asset-path我的boot cljs任务,因为source mapping文件遇到了问题。应该与lein-figwheel.

于 2016-01-21T10:39:10.403 回答