在 ClojureScript 中,为什么我不能导航到手动输入的 URL,但如果我单击 link 它会起作用?
In ClojureScript, why can't I navigate to a URL entered by hand, but if I click a link it works?
(注意,我使用的是 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.
但是如果我在导航到该路线的浏览器中单击 link,它工作正常...
这是相关代码:
客户端:
(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))
所以下面的 link 带我到 my-page
,控制台打印 "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 中单击页面 link 时它当前有效的原因是它将由秘书处理。如果您手动输入 url 则您正在重新加载页面并且请求最初由 compojure 处理。
编辑:
仔细查看后,relative links
您 html template
中的 css/js
文件很可能是此处的罪魁祸首:
/sectest/js/app.js
compojure resources
路由将不匹配,默认捕获所有路由 loading-page
作为 css/js
文件提供给您的浏览器。因此错误。
对于我的开发环境,我还必须更正我的 boot cljs
任务的 :asset-path
,因为 source mapping
文件存在问题。应该类似于 lein-figwheel
.
(注意,我使用的是 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.
但是如果我在导航到该路线的浏览器中单击 link,它工作正常...
这是相关代码:
客户端:
(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))
所以下面的 link 带我到 my-page
,控制台打印 "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 中单击页面 link 时它当前有效的原因是它将由秘书处理。如果您手动输入 url 则您正在重新加载页面并且请求最初由 compojure 处理。
编辑:
仔细查看后,relative links
您 html template
中的 css/js
文件很可能是此处的罪魁祸首:
/sectest/js/app.js
compojure resources
路由将不匹配,默认捕获所有路由 loading-page
作为 css/js
文件提供给您的浏览器。因此错误。
对于我的开发环境,我还必须更正我的 boot cljs
任务的 :asset-path
,因为 source mapping
文件存在问题。应该类似于 lein-figwheel
.