Skip to content

Instantly share code, notes, and snippets.

@BerkeleyTrue
Last active June 20, 2017 16:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BerkeleyTrue/275ae590d1bbe429356e61104c32b746 to your computer and use it in GitHub Desktop.
Save BerkeleyTrue/275ae590d1bbe429356e61104c32b746 to your computer and use it in GitHub Desktop.
Fyfe.js
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