Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ClojureScript中,为什么可以';我导航到一个手动输入的URL,但是如果我点击一个链接,它会工作吗?_Clojure_Clojurescript_Compojure_Reagent_Secretary - Fatal编程技术网

在ClojureScript中,为什么可以';我导航到一个手动输入的URL,但是如果我点击一个链接,它会工作吗?

在ClojureScript中,为什么可以';我导航到一个手动输入的URL,但是如果我点击一个链接,它会工作吗?,clojure,clojurescript,compojure,reagent,secretary,Clojure,Clojurescript,Compojure,Reagent,Secretary,(注意,我使用的是试剂、秘书和复合物(以及其他)) 我想创建一个路由/sectest/:id,如果我将浏览器指向该路由,则会出现以下错误: 资源被解释为样式表,但使用MIME类型text/html传输:http://localhost:3449/sectest/css/site.css". asdf:1 拒绝从“”执行脚本http://localhost:3449/sectest/js/app.js'因为其MIME类型('text/html')不可执行,并且启用了严格的MIME类型检查。 但是

(注意,我使用的是试剂、秘书和复合物(以及其他))

我想创建一个路由
/sectest/:id
,如果我将浏览器指向该路由,则会出现以下错误:

资源被解释为样式表,但使用MIME类型text/html传输:http://localhost:3449/sectest/css/site.css".
asdf: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))
服务器端:

(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中的页面链接时,它目前起作用的原因是它将由秘书处理。如果手动输入url,则会重新加载页面,请求最初由compojure处理

编辑:

(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))
仔细查看后,
html模板中
css/js
文件的
相对链接很可能是罪魁祸首:

/sectest/js/app.js
compojure
resources
路由将不匹配,默认的catch-all-route
加载页面将作为
css/js
文件发送到浏览器。因此出现了错误


对于我的dev env,我还必须纠正
引导cljs
任务的
:资产路径
,因为
源映射
文件遇到了这个问题。应该与lein figwheel

类似,嗯,我完全按照你说的进行了尝试,不幸的是,我得到了相同的行为,问题开头列出了相同的错误。。。听起来你的回答是正确的(只要compojure/秘书是处理事情的人),但我不知道如何让compojure与秘书相处,还有其他想法吗?我会先尝试与秘书使用url前缀,以确保其他一切都是正确的。除了您的代码更改之外,我真的想不出还有什么其他原因没有激活。我将尝试此操作,我正准备写回以下内容:在这种情况下,我得到了相同的错误,我认为它应该会起作用:
(get/:id“[id]id)
。如果导航到“/你好”,浏览器将显示“你好”。如果导航到“/hello/world”,我会得到我在开头显示的错误。相关的?使用URL前缀并没有改变任何事情,但我仍然无法理解这一点!我刚刚遇到了一个奇怪的错误,我创建了一个路由
(defn-catchall-page[][:p“Hola!”)
&
(secretary/defroute“*”[](session/put!:current page#“catchall-page”)
,如果我导航到某个随机路由,浏览器会显示“Hola!”,但当我单击任意位置时,我会被发送回路由“/”定义的主页,但浏览器中的URL保持不变(即一些随机路径)。。。我疯了吗?关于
(GET”/:id“[id]id)
,在下一个
/
之前,这只会匹配一些字符串,因此您看到的行为是正确的,没有关联。让我尝试了一些东西,结果我的宠物水疗项目也遇到了同样的问题。更新了答案。:)