Pregunta

1. Motivación

Estoy escribiendo mi propio mini-wiki. Quiero poder convertir fácilmente de Markdown a látex/HTML y viceversa. Después de una búsqueda, descubrí Pándoc, que está escrito en Haskell y que podría usar el módulo FastCGI para ejecutar un programa Haskell en mi servidor Apache.

2. Problema/ pregunta

No estoy seguro de cómo para qué protocolo debería usar para enviar mi script FastCGI las variables de entrada/salida (¿post/get?) Y cómo se hace exactamente. ¿Alguna idea, sugerencias, soluciones?

3. Pasos tomados

3.1 intento

Esto es lo que he hecho hasta ahora (basado en el código de ejemplo). Tenga en cuenta que no tengo experiencia en Haskell y en este momento no tengo demasiado tiempo para aprender el idioma. Me encantaría poder usar la herramienta de conversión de formato de texto 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

Este código lee la cadena después del signo de interrogación en la URL de solicitud. Pero esta no es una buena solución ya que ciertos personajes se omiten (por ejemplo, '#') y los espacios son reemplazados por "/20%".

Gracias por adelantado.

3.2 network.cgi

Documentación encontrada aquí. Bajo el encabezado "Entrada", hay una serie de métodos para obtener la entrada. ¿Cuál es el adecuado para mí?

Lo es :

Obtenga el valor de una variable de entrada, por ejemplo, de un formulario. Si la variable tiene múltiples valores, se devuelve el primero. Ejemplo:

query <- getInput "query"

Así que digamos que tengo una forma de publicación HTML con name='Joe' ¿Puedo agarrar esto usando GetInput? Y si es así, ¿cómo manejo el Maybe String ¿escribe?

¿Fue útil?

Solución

El paquete FastCGI es en realidad una extensión del CGI Paquete, que incluye los tipos de protocolo para recibir datos de solicitud y páginas de resultados de devolución. Sugeriría usar CGI para comenzar, y luego pasar a FastCGI una vez que sepa lo que está haciendo.

Es posible que también quieras mirar este tutorial.

Editar para responder preguntas sobre el tutorial:

"Quizás un" es un tipo que puede contener "solo un" o "nada". La mayoría de los idiomas usan un puntero nulo para indicar que no hay datos, pero Haskell no tiene punteros nulos. Por lo tanto, tenemos un tipo explícito "tal vez" en su lugar para los casos en que los datos pueden ser nulos. Los dos constructores ("solo" y "nada") junto con el tipo te obligan a permitir explícitamente el caso nulo cuando podría suceder, pero también te permiten ignorarlo cuando no puede suceder.

La función "Quizás" es el extractor universal para tal vez tipos. La firma es:

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

Tomando los argumentos de adelante hacia atrás, el tercer argumento "Quizás un" es el valor con el que está tratando de trabajar. El segundo argumento es una función llamada si el tercer argumento es "solo V", en cuyo caso el resultado es "FV". El primer argumento es el valor predeterminado, devuelto si el tercero es "nada".

En este caso, el truco es que la función "Cgimain" se llama dos veces. Si encuentra un campo de entrada "nombre", la variable "MN" se establecerá en (solo "Joe Bloggs"), de lo contrario se establecerá en (nada). (Estoy usando soportes para delimitar los valores ahora porque se están utilizando citas para cadenas).

Entonces, la llamada "Quizás" devuelve la página para renderizar. Se proporciona la primera vez a través de no nombre, por lo que "MN" es (nada) y la página predeterminada de "InputForm" se devuelve para la representación. Cuando el usuario hace clic, envía la misma URL, pero esta vez con el campo de "nombre" establecido, por lo que ahora obtienes la función "Saludo" llamada con el nombre como argumento, por lo que dice "Hola Joe Bloggs".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top