4

(新手提醒)

鉴于以下错误消息,找到错误源的最快方法是什么:

08/Jul/2016:11:39:01 +0530 [Error#yesod-core] expected EPlain but got Nothing for: DerefBranch (DerefIdent (Ident "show")) (DerefString "abcdef") @(yesod_3MCr4WfhviiELXmo3fAaXL:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:625:5)
GET /
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Status: 500 Internal Server Error 0.054158s

Handler/Home.hs:38:11:
    No instance for (Text.Julius.ToJavascript String)
      arising from a use of ‘Text.Julius.toJavascript’
    In the second argument of ‘(GHC.Base..)’, namely
      ‘Text.Julius.toJavascript’
    In the second argument of ‘(GHC.Base..)’, namely
      ‘(Text.Julius.unJavascript GHC.Base.. Text.Julius.toJavascript)’
    In the expression:
      Text.Shakespeare.EPlain
      GHC.Base..
        (Text.Julius.unJavascript GHC.Base.. Text.Julius.toJavascript)
Build failure, pausing...

我正在使用一个简单的脚手架站点(没有 DB),并且故意弄乱了homepage.julius. 在这个特定的例子中,我确切地知道错误是什么,但是仅仅通过查看错误消息怎么能知道呢?

4

1 回答 1

2

在仔细阅读http://hackage.haskell.org/package/shakespeare-2.0.8/docs/Text-Julius.html之后,看起来您正试图在需要 javascript 的东西中嵌入一个纯字符串。

这通常是被阻止的,这样当你试图只显示他们提供的字符串时,别人就不能将错误的代码注入页面。所以只需在其上调用 rawJS 并嵌入它?或者,您提供的变量可能使用了错误的插值类型(@、^ 或 #)。Yesod对此很特别。

这只是一个猜测,因为我不使用 julius。

于 2016-07-08T16:24:34.263 回答