123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // serve.js
- // This file contains the low level helper functions that the VWF nodeJS server uses to
- // actually serve content.
- var filecache = require( './file-cache' ),
- YAML = require( 'js-yaml' ),
- fs = require( 'fs' ),
- helpers = require( './helpers' );
- // First, if the FileCache has not been instantiated, do so.
- if ( global.FileCache == undefined ) {
- var FileCache = new filecache._FileCache( );
- global.FileCache = FileCache;
- }
- // Basic helper function to redirect a request.
- function ServeRedirect( url, response ) {
- response.writeHead( 302, { 'Location': url } );
- response.end();
- }
- //Just serve a simple file, using the FileCache implementation.
- function ServeFile( request, filename, response, URL ) {
- FileCache.ServeFile( request, filename, response, URL );
- }
- //Return a 404 file and not found code
- function _404 ( response, file404 ) {
- var url404 = helpers.JoinPath( global.applicationRoot, file404 );
- if ( helpers.IsFile( url404 ) ) {
- fs.readFile( url404, function( error, data ) {
- response.writeHead( 404, {'content-type': 'text/html'} );
- response.end( data );
- });
- } else {
- response.writeHead( 404, {
- "Content-Type": "text/plain",
- "Access-Control-Allow-Origin": "*"
- } );
- response.write( "404 Not Found\n" );
- response.end();
- }
- }
- // Parse and serve a JSON file
- // Note: If we receive a 'callback' query, we need to
- // serve the file as application/javascript and
- // adjust slightly.
- function ServeJSONFile( filename, response, URL ) {
- fs.readFile( filename, "utf8", function ( err, data ) {
- if ( err ) {
- response.writeHead( 500, {
- "Content-Type": "text/plain"
- } );
- response.write( err + "\n" );
- response.end();
- return;
- }
- var type = "application/json";
- var jsonString = data;
- var callback = URL.query.callback;
- if ( callback ) {
- jsonString = callback + "(" + data + ")";
- type = "application/javascript";
- }
-
- response.writeHead( 200, {
- "Content-Type": type
- } );
-
- response.write( jsonString, "utf-8" );
-
- response.end();
- } );
- }
- //Parse and serve a YAML file
- function ServeYAML( filename, response, URL ) {
- var tf = filename;
- fs.readFile( filename, "utf8", function ( err, data ) {
- if (err) {
- response.writeHead( 500, {
- "Content-Type": "text/plain"
- } );
- response.write( err + "\n" );
- response.end();
- return;
- }
- // Remove the Byte Order Mark (BOM) if one exists
- var file = data.replace( /^\uFEFF/, '' );
- //global.log(tf);
- try {
- var deYAML = JSON.stringify( YAML.load( file ) );
- } catch ( e ) {
- global.log( "error parsing YAML " + filename );
- _404( response );
- return;
- }
- var type = "application/json";
- var callback = URL.query.callback;
- if ( callback ) {
- deYAML = callback + "(" + deYAML + ")";
- type = "application/javascript";
- }
- response.writeHead( 200, {
- "Content-Type": type
- } );
- response.write( deYAML, "utf8" );
- response.end();
- } );
- }
- //Serve a JSON object
- function ServeJSON( jsonobject, response, URL ) {
- response.writeHead( 200, {
- "Content-Type": "application/json"
- } );
- response.write( JSON.stringify( jsonobject ), "utf8" );
- response.end();
- }
- exports.Redirect = ServeRedirect;
- exports.File = ServeFile;
- exports._404 = _404;
- exports.JSONFile = ServeJSONFile;
- exports.YAML = ServeYAML;
- exports.JSON = ServeJSON;
|