Last active
June 20, 2017 16:43
-
-
Save BerkeleyTrue/275ae590d1bbe429356e61104c32b746 to your computer and use it in GitHub Desktop.
Fyfe.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { createServer, at } from 'fyfe'; | |
| import { GET, composeRoutes, composeMiddleware } from 'fyfe-compose-routes'; | |
| import fyfeDefaults from 'fyfe-defaults'; | |
| // composes routes together | |
| // first route to return something other then Void will win | |
| const routes = composeRoutes( | |
| // use a route handler | |
| // Request => Responce|String|Stream|Void | |
| GET('/', renderIndex), | |
| // a route handler can also reutrn a string. | |
| // the route handler creator is smart enough to just send the response back as the body | |
| // { status: 200, body: 'Foo' } | |
| GET('/foo', () => 'Foo'), | |
| // We can also just define a constant string to send back | |
| GET('/bar', 'Bar'), | |
| // We use an optional second arg of type Array do define what properties to pluck of the request | |
| GET('/repos/:reposId', ['repoId'], renderRepo), | |
| GET('/react', () => renderToString(<h1>Hello World</h1>)), | |
| // add static resources | |
| resources('/', { path: 'public' }) | |
| ); | |
| const reqTime = (handler, req) => { | |
| const start = Date.now(); | |
| return handler(req).map(res => { | |
| const totalTime = Date.now() - start; | |
| console.log('request took %s ms', totalTime); | |
| return res; | |
| }); | |
| }; | |
| const errorHandler = (handler, req) => { | |
| return handler(req).catch(err => { | |
| debug(err); | |
| return [{ status: 500, body: 'Opps, something went wrong' }]; | |
| }); | |
| }; | |
| // will create server using | |
| createServer( | |
| composeMiddleware( | |
| // add sensible default middlewares | |
| fyfeDefaults, | |
| reqTime, | |
| errorHandler | |
| )(routes, fyfeDefaults.site), | |
| { | |
| port: 8000, | |
| env: process.env.NODE_ENV | |
| } | |
| ) | |
| .takeUntil( | |
| mergeStatic( | |
| // close server on <C-c> signal | |
| fromEvent(process, 'SIGINT'), | |
| // close server on cluster child disconnect | |
| fromEvent(process, 'disconnect) | |
| ) | |
| ) | |
| .do( | |
| ({ env, port }) => { | |
| console.log('freeCodeCamp server listening on port %d in %s', port, env); | |
| }, | |
| // any uncaught errors will hit this function | |
| err => throw err, | |
| () => console.log('shutting down server') | |
| ) | |
| .subscribe( | |
| null, | |
| null, | |
| () => process.exit(0) | |
| ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment