prerendercloud

package module
v0.0.0-...-2d71e49 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 6, 2022 License: MIT Imports: 15 Imported by: 0

README

prerendercloud-golang

negroni middleware, and a fasthttp handler for pre-rendering JavaScript single page apps with Headless-Render-API.com (formerly named prerender.cloud from 2016 - 2022)

Set your API token via env var

(get token after signing up at Headless-Render-API.com)

PRERENDER_TOKEN="mySecretTokenFromPrerenderCloud" go run main.go

Using it in negroni

package main

import (
	"net/http"

	"github.com/codegangsta/negroni"
	prerendercloud "github.com/sanfrancesco/prerendercloud-golang"
)

func main() {

	// set the PRERENDER_TOKEN env var when starting this golang binary/executable
	prerenderCloudOptions := prerendercloud.NewOptions()

	// not recommended, but if you must, uncomment this to
	// restrict prerendering to bots and the _escaped_fragment_ query param
	// prerenderCloudOptions.BotsOnly = true
	// with BotsOnly enabled, we don't include googlebot by default (to reduce cloaking penality risk), this is how you could enable it
	// prerendercloud.CrawlerUserAgents = append(prerendercloud.CrawlerUserAgents, "googlebot")

	prerenderCloud := prerenderCloudOptions.NewPrerender()

	n := negroni.New()
	n.Use(negroni.NewLogger())
	n.Use(prerenderCloud)
	n.Use(negroni.NewStatic(http.Dir(".")))
	n.Run(":8080")
}

Using it in fasthttp

package main

import (
	"fmt"

	prerendercloud "github.com/sanfrancesco/prerendercloud-golang"
	"github.com/valyala/fasthttp"
)

func main() {

	// set the PRERENDER_TOKEN env var when starting this golang binary/executable
	prerenderCloudOptions := prerendercloud.NewOptions()

	// not recommended, but if you must, uncomment this to
	// restrict prerendering to bots and the _escaped_fragment_ query param
	// prerenderCloudOptions.BotsOnly = true
	// with BotsOnly enabled, we don't include googlebot by default (to reduce cloaking penality risk), this is how you could enable it
	// prerendercloud.CrawlerUserAgents = append(prerendercloud.CrawlerUserAgents, "googlebot")

	prerenderCloud := prerenderCloudOptions.NewPrerender()

	requestHandler := func(ctx *fasthttp.RequestCtx) {
		if prerenderCloud.ShouldPrerenderFastHttp(ctx) && prerenderCloud.PreRenderHandlerFastHttp(ctx) == nil {
			return
		} else {
			ctx.SetContentType("text/html")
			fmt.Fprintf(ctx, `
        <div id='root'></div>
        <script type='text/javascript'>
          document.getElementById('root').innerHTML = "hello";
        </script>
      `)
		}
	}

	fasthttp.ListenAndServe(":8080", requestHandler)
}

Documentation

Overview

Package prerender provides a Prerender.cloud handler implementation and a Negroni middleware.

Index

Constants

This section is empty.

Variables

View Source
var CrawlerUserAgents = []string{

	"baiduspider",
	"facebookexternalhit",
	"twitterbot",
	"rogerbot",
	"linkedinbot",
	"embedly",
	"quora link preview",
	"showyoubot",
	"outbrain",
	"pinterest",
	"pinterest/0.",
	"developers.google.com/+/web/snippet",
	"slackbot",
	"vkShare",
	"W3C_Validator",
	"redditbot",
	"Applebot",
	"WhatsApp",
	"flipboard",
	"tumblr",
	"bitlybot",
	"SkypeUriPreview",
	"nuzzel",
	"Discordbot",
	"Google Page Speed",
}

Functions

This section is empty.

Types

type Options

type Options struct {
	PrerenderURL   *url.URL
	Token          string
	UsingAppEngine bool
	BotsOnly       bool
}

Options provides you with the ability to specify a custom Prerender.cloud URL as well as a Prerender.cloud Token to include as an X-Prerender-Token header to the upstream server.

func NewOptions

func NewOptions() *Options

NewOptions generates a default Options struct pointing to the Prerender.cloud service, obtaining a Token from the environment variable PRERENDER_TOKEN.

func (*Options) NewPrerender

func (o *Options) NewPrerender() *Prerender

NewPrerender generates a new Prerender instance.

type Prerender

type Prerender struct {
	Options *Options
}

Prerender exposes methods to validate and serve content from a Prerender.cloud upstream server.

func (*Prerender) PreRenderHandler

func (p *Prerender) PreRenderHandler(rw http.ResponseWriter, or *http.Request, next http.HandlerFunc)

PreRenderHandler is a net/http compatible handler that proxies a request to the configured Prerender.cloud URL. All upstream requests are made with an Accept-Encoding=gzip header. Responses are provided either uncompressed or gzip compressed based on the downstream requests Accept-Encoding header

func (*Prerender) PreRenderHandlerFastHttp

func (p *Prerender) PreRenderHandlerFastHttp(ctx *fasthttp.RequestCtx) error

func (*Prerender) ServeHTTP

func (p *Prerender) ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc)

ServeHTTP allows Prerender to act as a Negroni middleware.

func (*Prerender) ShouldPrerender

func (p *Prerender) ShouldPrerender(or *http.Request) bool

ShouldPrerender analyzes the request to determine whether it should be routed to a Prerender.cloud upstream server.

func (*Prerender) ShouldPrerenderFastHttp

func (p *Prerender) ShouldPrerenderFastHttp(ctx *fasthttp.RequestCtx) bool

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL