Frage

1.Motivation

Ich schreibe mein eigenes Mini-Wiki.Ich möchte in der Lage sein, problemlos von Markdown zu LATEX/HTML und umgekehrt zu konvertieren.Nach einigem Suchen habe ich es entdeckt Pandoc, das in Haskell geschrieben ist und dass ich das FastCGI-Modul verwenden könnte, um ein Haskell-Programm auf meinem Apache-Server auszuführen.

2.Problem/Frage

Ich bin mir nicht sicher, welches Protokoll ich verwenden soll, um meinem FastCGI-Skript die Eingabe-/Ausgabevariablen (POST/GET?) zu senden, und wie dies genau geschieht.Irgendwelche Ideen, Vorschläge, Lösungen?

3.Schritte gemacht

3.1 Versuch

Hier ist, was ich bisher gemacht habe (basierend auf Beispielcode). Beachten Sie, dass ich keine Erfahrung in Haskell habe und im Moment nicht viel Zeit habe, die Sprache zu lernen.Ich würde einfach gerne das Pandoc-Tool zur Textformatkonvertierung verwenden können.

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

Dieser Code liest die Zeichenfolge nach dem Fragezeichen in der Anforderungs-URL.Dies ist jedoch keine gute Lösung, da bestimmte Zeichen weggelassen werden (z. B.'#' ) und Leerzeichen werden durch „/20%“ ersetzt.

Dank im Voraus.

3.2 Netzwerk.CGI

Dokumentation finden Sie hier. Unter der Überschrift „Eingabe“ gibt es eine Reihe von Methoden, um Eingaben zu erhalten. Welches ist das Richtige für mich?

Ist es :

Holen Sie sich den Wert einer Eingabevariablen, beispielsweise aus einem Formular.Wenn die Variable mehrere Werte hat, wird der erste zurückgegeben.Beispiel:

query <- getInput "query"

Nehmen wir also an, ich habe ein HTML-POST-Formular mit name='Joe' Kann ich das mit getInput abrufen?Und wenn ja, wie gehe ich damit um? Maybe String Typ?

War es hilfreich?

Lösung

Das fastCGI-Paket ist eigentlich eine Erweiterung von cgi Paket, das die Protokolltypen zum Empfangen von Anforderungsdaten und zum Zurückgeben von Ergebnisseiten enthält.Ich würde vorschlagen, zunächst CGI zu verwenden und dann zu fastCGI überzugehen, sobald Sie wissen, was Sie tun.

Vielleicht möchten Sie auch einen Blick darauf werfen dieses Tutorial.

Bearbeiten, um Fragen zum Tutorial zu beantworten:

„Maybe a“ ist ein Typ, der entweder „Just a“ oder „Nothing“ enthalten kann.Die meisten Sprachen verwenden einen Nullzeiger, um anzuzeigen, dass keine Daten vorhanden sind, Haskell verfügt jedoch nicht über Nullzeiger.Daher haben wir stattdessen einen expliziten „Maybe“-Typ für Fälle, in denen die Daten möglicherweise null sind.Die beiden Konstruktoren („Just“ und „Nothing“) zwingen Sie zusammen mit dem Typ dazu, den Null-Fall explizit zuzulassen, wenn er passieren könnte, erlauben Ihnen aber auch, ihn zu ignorieren, wenn er nicht passieren kann.

Die Funktion „maybe“ ist der universelle Extraktor für Maybe-Typen.Die Signatur lautet:

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

Betrachtet man die Argumente von vorne nach hinten, ist das dritte Argument „Vielleicht ein“ der Wert, mit dem Sie arbeiten möchten.Das zweite Argument ist eine Funktion, die aufgerufen wird, wenn das dritte Argument „Just v“ ist. In diesem Fall ist das Ergebnis „f v“.Das erste Argument ist der Standardwert und wird zurückgegeben, wenn das dritte „Nothing“ ist.

Der Trick besteht in diesem Fall darin, dass die Funktion „cgiMain“ zweimal aufgerufen wird.Wenn ein Eingabefeld „Name“ gefunden wird, wird die Variable „mn“ auf (Nur „Joe Bloggs“) gesetzt, andernfalls wird sie auf (Nichts) gesetzt.(Ich verwende jetzt Klammern, um Werte zu begrenzen, da für Zeichenfolgen Anführungszeichen verwendet werden.)

Der „maybe“-Aufruf gibt also die zu rendernde Seite zurück.Beim ersten Mal wird kein Name angegeben, daher ist „mn“ (Nichts) und die Standardseite „inputForm“ wird zum Rendern zurückgegeben.Wenn der Benutzer auf „Senden“ klickt, wird dieselbe URL angefordert, diesmal jedoch mit festgelegtem Feld „Name“. Jetzt wird die Funktion „Begrüßen“ mit dem Namen als Argument aufgerufen, sodass dort „Hallo Joe Bloggs“ steht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top