(注意,我正在使用 Reagent、Secretary 和 Compojure(以及其他))
我想创建一个路由 /sectest/:id
,如果我将浏览器指向该路由,则会收到以下错误:
资源解释为样式表,但使用 MIME 类型 text/html 进行传输:“http://localhost:3449/sectest/css/site.css”。
阿斯达夫:1
拒绝执行来自“http://localhost:3449/sectest/js/app.js”的脚本,因为其 MIME 类型(“text/html”)不可执行,并且启用了严格的 MIME 类型检查。
但是如果我点击浏览器中导航到该路线的链接,它就可以正常工作......
相关代码如下:
客户端:
(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))
因此,以下链接将我带到我的页面
,控制台打印“Hi asdf”
就好了:
[:div [:a {:href "/sectest/asdf"} "SECTEST"]]
但是如果我输入http://localhost:3449/sectest/asdf
,我会收到错误,而且我似乎无法跟踪它。我怀疑这可能与试图查找位于 /sectest
的资源的代码有关(它不应该),但我无法确认这一点或弄清楚如何使用它...我是 clojure 的新手,所以如果我在某些方面非常无知,有什么想法吗?
最佳答案
看看你的服务器端路由,实际上你只有一条路由:
(GET "*" [] loading-page)
由于它处理所有事情,因此所有后续路由将永远不会触发。订单事宜:
(defroutes routes
(GET "/cards" [] cards-page)
(resources "/")
(GET "*" [] loading-page) ;this anticipates client-side routing only
)
上面应该可以解决问题,我删除了 404 路由,因为这应该由前端路由处理。
当前在单击 SPA 中的页面链接时起作用的原因是它将由秘书处理。如果您手动输入网址,您将重新加载页面,并且该请求最初由 compojure 处理。
编辑:
仔细观察后,html 模板
中 css/js
文件的相对链接
很可能是罪魁祸首:
/sectest/js/app.js
compojure resources
路由不匹配,默认捕获所有路由 loading-page
将作为 css/js
文件提供给您浏览器。因此出现错误。
对于我的开发环境,我还必须更正我的 boot cljs
任务的 :asset-path
,因为源映射
文件遭受了问题。应该与 lein-figwheel 类似。
关于clojure - 在 ClojureScript 中,为什么我无法导航到手动输入的 URL,但如果我单击链接它就可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916548/