質問

1.モチベーション

私は自分のミニウィキを書いています。 MarkdownからLaTex/HTMLに簡単に変換できるようにしたいのですが、その逆も同様です。いくつかの検索の後、私は発見しました パンドク, 、Haskellで書かれており、FastCGIモジュールを使用してApacheサーバーでHaskellプログラムを実行できることです。

2.問題/質問

FastCGIスクリプトに入力/出力変数を送信するために使用するプロトコル(POST/GET?)の方法と、これが正確にどのように行われるかはわかりません。何かアイデア、提案、解決策はありますか?

3.取った手順

3.1試行

これまでに私が行ったことは次のとおりです(例のコードに基づいて)。 注意してください、私はHaskellでの経験がありません。現時点では、言語を学ぶ時間があまりありません。 Pandocテキスト形式変換ツールを使用できるようになりたいだけです。

module Main ( main ) where

import Control.Concurrent
import Network.FastCGI
import Text.Pandoc

--initialize Variables/ functions
fastcgiResult :: CGI CGIResult
markdownToHTML:: String -> String

--implement conversion function
markdownToHTML s = writeLaTeX defaultWriterOptions {writerReferenceLinks = True} (readMarkdown defaultParserState s)    

--main action
fastcgiResult = do
    setHeader "Content-type" "text/plain"
    n <- queryString
    output $ (markdownToHTML n)

main :: IO ()
main = runFastCGIConcurrent' forkIO 10 fastcgiResult

このコードは、リクエストURLの疑問符の後に文字列を読み取ります。しかし、これは特定の文字が省略されているため( '#')、スペースが「/20%」に置き換えられるため、良い解決策ではありません。

前もって感謝します。

3.2 network.cgi

ここにあるドキュメント。 「入力」という見出しの下には、入力を取得するための多くの方法があります。 どちらが私に正しいですか?

それは...ですか :

フォームから、入力変数の値を取得します。変数に複数の値がある場合、最初の値が返されます。例:

query <- getInput "query"

だから、私はHTMLの投稿フォームを持っているとしましょう name='Joe' getInputを使用してこれをつかむことはできますか?もしそうなら、私はどのように処理できますか Maybe String タイプ?

役に立ちましたか?

解決

FastCGIパッケージは実際にはの拡張です CGI パッケージには、リクエストデータを受信し、結果ページを返すためのプロトコルタイプが含まれています。 CGIを使用して始めてから、自分が何をしているのかを知ったらFastCGIに移動することをお勧めします。

あなたも見たいかもしれません このチュートリアル.

チュートリアルに関する質問に答えるために編集します:

「たぶん」は、「ただの」または「何もない」を含むことができるタイプです。ほとんどの言語は、nullポインターを使用してデータがないことを示しますが、Haskellにはnullポインターがありません。したがって、データがnullである場合に代わりに、代わりに「多分」タイプがあります。 2つのコンストラクター(「Just」と「Nothing」)とタイプは、それが起こる可能性がある場合にヌルケースを明示的に許可するように強制しますが、それが発生できないときにそれを無視できます。

「たぶん」関数は、たぶんタイプの普遍的な抽出器です。署名は次のとおりです。

maybe :: b -> (a -> b) -> Maybe a -> b

「おそらく」第三の議論は、前から後ろに議論を行います。 2番目の引数は、3番目の引数が「Just V」である場合に呼ばれる関数です。その場合、結果は「FV」です。最初の引数はデフォルトであり、3番目が「何もない」場合に返されます。

この場合、トリックは、「cgimain」関数が2回呼び出されることです。入力フィールド「名前」が見つかった場合、「Mn」変数は(Joe Bloggs」に設定され、それ以外の場合は(何もありません)に設定されます。 (引用符が文字列に使用されているため、ブラケットを使用して値を区切ります)。

したがって、「たぶん」コールがページを返してレンダリングします。最初に名前が提供されていないため、「mn」は(何も)であり、デフォルトの「入力」ページがレンダリングのために返されます。ユーザーがクリックすると同じURLがリクエストされますが、今回は「名前」フィールドセットを使用すると、名前が引数として呼ばれる「挨拶」関数が取得されるため、「Hello Joe Bloggs」と表示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top