Question

1. Motivation

J'écris mon propre mini-wiki. Je veux être en mesure de convertir facilement de démarquage à LATEX / HTML et vice versa. Après quelques recherches je découvris Pandoc , qui est écrit en Haskell et que je pouvais utiliser le module FastCGI pour exécuter un Haskell programme sur mon serveur Apache.

2. Problème / Question

Je ne sais pas comment ce protocole que je devrais utiliser pour envoyer mon script FastCGI les variables d'entrée / sortie (POST / GET?) Et comment cela se fait exactement. Toutes les idées, suggestions, solutions?

3. Les mesures prises

3.1 Tentative

Voici ce que je l'ai fait jusqu'à présent (en fonction du code exemple). Remarque, je n'ai pas d'expérience en Haskell et au moment je n'ai pas trop de temps pour apprendre la langue. J'aimerais juste pouvoir utiliser l'outil de conversion de format de texte 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

Ce code lit la chaîne après le point d'interrogation dans l'URL de la demande. Mais ce n'est pas une bonne solution car certains caractères sont omis (par exemple « # ») et les espaces sont remplacés par « / 20% ».

Merci à l'avance.

3.2 Network.CGI

Documentation disponible ici. Sous la rubrique « entrée » il y a un certain nombre de méthodes pour obtenir l'entrée. Lequel est bon pour moi?

est-il:

Obtenir la valeur d'une variable d'entrée, par exemple d'un formulaire. Si la variable a plusieurs valeurs, le premier est retourné. Exemple:

query <- getInput "query"

permet de dire que j'ai un formulaire HTML POST avec name='Joe' puis-je saisir cette utilisant getInput? Et si oui, comment puis-je gérer le type de Maybe String?

Était-ce utile?

La solution

Le paquet fastCGI est en fait une extension du paquet cgi , qui comprend les types de protocole pour recevoir des données de demande et les pages de résultats du scrutin. Je suggère d'utiliser CGI pour commencer, et ensuite passer à fastCGI une fois que vous savez ce que vous faites.

Vous pouvez également consulter ce tutoriel .

Modifier pour répondre aux questions sur le tutoriel:

« Peut-être un » est un type qui peut contenir soit « Juste un » ou « rien ». La plupart des langues utilisent un pointeur NULL pour indiquer qu'il n'y a pas de données, mais Haskell ne dispose pas de pointeurs nuls. Nous avons donc un explicite « Peut-être » de type plutôt que dans les cas où les données peuvent être NULL. Les deux constructeurs ( « juste » et « rien ») ainsi que la force de type que vous autorisez explicitement le cas nul quand il peut arriver, mais aussi vous laisser ignorer quand il ne peut pas arriver.

La fonction « peut-être » est l'extracteur universel pour les types Peut-être. La signature est:

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

En prenant les arguments d'avant en arrière, le « peut-être un » troisième argument est la valeur que vous essayez de travailler avec. Le second argument est une fonction appelée si le troisième argument est « Just v », auquel cas le résultat est « f v ». Le premier argument est la valeur par défaut, retourné si le troisième est « rien ».

Dans ce cas, l'affaire est que la fonction « cgiMain » est appelée deux fois. Si elle trouve un champ de saisie « nom » la variable « mn » sera réglé sur (Just « Joe Bloggs »), sinon il sera réglé sur (rien). (J'utilise des valeurs entre parenthèses à délimitent maintenant parce que les guillemets sont utilisés pour les chaînes).

Ainsi, le « peut-être » l'appel renvoie la page à rendre. La première fois sans nom est fourni, donc « mn » est (rien) et la valeur par défaut « inputForm » page est retourné pour le rendu. Lorsque l'utilisateur clique Soumettre la même URL est demandée, mais cette fois avec le jeu de champ « Nom », alors maintenant vous obtenez la « saluer » fonction appelée avec le nom comme argument, il dit: « Bonjour Joe Bloggs ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top