Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

falcor-restify

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

falcor-restify

A falcor server for restify.

  • 1.1.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
3
decreased by-50%
Maintainers
1
Weekly downloads
 
Created
Source

falcor-restify

Server plugin for falcor-restify

Working usage example of the basic repro in example/

Usage

Minimalistic example

'use strict';

var bunyan = require('bunyan');
var mwFactory = require('falcor-express');
var restify = require('restify');
var rx = require('rx');
var Router = require('falcor-router');

var LOG = bunyan.createLogger({
    name: 'demo',
    level: bunyan.DEBUG,
    src: true
});

var client = restify.createJsonClient({
    url: 'http://api-global.netflix.com/',
    log: LOG.child({
        component: 'server',
        level: bunyan.INFO,
        serializers: bunyan.stdSerializers
    }),
    version: '*'
});

var router = new Router([{
    route: "genrelist[{integers:indices}].name",
    get: function (pathSet) {
        return rx.Observable.create(function subscribe(observer) {
            var subscribed = true;

            client.get('/apps/static/sample/genreLists',
                       function (err, req, res, obj) {
                if (!subscribed) {
                    return;
                }
                if (err) {
                    observer.onError(err);
                } else {
                    observer.onNext(obj);
                    observer.onCompleted();
                }
            });

            return function dispose() {
                subscribed = false;
            };
        }).flatMap(function (genrelist) {
            return rx.Observable.
                fromArray(pathSet.indices).
                map(function (index) {
                _.merge();
                    return {
                        path: ['genrelist', index, 'name'],
                        value: genrelist[index].name
                    }
            });
        });
    }
}, {
    route: "genrelist[{integers:indices}].titles[{integers:titleIndices}]",
    get: function (pathSet) {
        return rx.Observable.create(function subscribe(observer) {
            var subscribed = true;

            client.get('/apps/static/sample/genreLists',
                       function (err, req, res, obj) {
                if (err) {
                    req.log.error({err: err});
                    observer.onError(err);
                } else if (!subscribed) {
                    return;
                } else {
                    observer.onNext(obj);
                    observer.onCompleted();
                }
            });

            return function dispose() {
                subscribed = false;
            };
        }).flatMap(function (genrelist) {
            return rx.Observable.
                fromArray(pathSet.indices).
                flatMap(function (index) {
                    return rx.Observable.
                        fromArray(pathSet.titleIndices).
                        map(function (titleIndex) {
                            console.trace('foo');
                            return {
                                path: ['genrelist', index, 'titles', titleIndex],
                                value: {
                                    $type: 'ref',
                                    value: ['titlesById', genrelist[index].titles[titleIndex].id]
                                }
                            }
                        })
                });
        });
    }
}, {
    route: "titlesById[{integers:titleIds}].name",
    get: function (pathSet) {
        return rx.Observable.create(function subscribe(observer) {
            var subscribed = true;

            client.get('/apps/static/sample/titles?ids=' + pathSet.titleIds.join(','),
                       function (err, req, res, obj) {
                if (!subscribed) {
                    return;
                }
                if (err) {
                    observer.onError(err);
                } else {
                    observer.onNext(obj);
                    observer.onCompleted();
                }
            });

            return function dispose() {
                subscribed = false;
            };
        }).flatMap(function (titlesList) {
            return rx.Observable.
                fromArray(pathSet.titleIds).
                map(function (titleId, index) {
                    return {
                        path: ['titlesById', titleId, 'name'],
                        value: titlesList[index].title
                    }
            })
        });
    }
}]);

var server = restify.createServer({
    log: LOG.child({
        component: 'server',
        level: bunyan.INFO,
        streams: [{
            // This ensures that if we get a WARN or above all debug records
            // related to that request are spewed to stderr - makes it nice
            // filter out debug messages in prod, but still dump on user
            // errors so you can debug problems
            level: bunyan.DEBUG,
            type: 'raw',
            stream: new restify.bunyan.RequestCaptureStream({
                level: bunyan.WARN,
                maxRecords: 100,
                maxRequestIds: 1000,
                stream: process.stderr
            })
        }],
        serializers: bunyan.stdSerializers
    })
});

server.use(restify.requestLogger());
server.use(restify.queryParser());

server.on('after', restify.auditLogger({
    log: LOG.child({
        component: 'audit'
    })
}));


server.on('uncaughtException', function (req, res, route, err) {
    req.log.error(err, 'got uncaught exception');
});

server.get('/model.json', mwFactory.restifyMiddleware(function (req, res, next) {
    return router;
}));

server.listen(8080, function() {
  LOG.info('%s listening at %s', server.name, server.url);
});

FAQs

Package last updated on 17 Aug 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc