src/write.js

Method write

Writes files to disk

Parameters:

  • req must be an Object.
    (HTTP request Object)

  • res must be an Object.
    (HTTP response Object)

  • path must be a String.
    (File path)

Returns an Object
(TurtleIO instance)

TurtleIO.prototype.write = function ( req, res, path ) { var self = this, put = ( req.method === "PUT" ), body = req.body, allow = this.allows( req.url ), del = this.allowed( "DELETE", req.url ), status; if ( !put && $.regex.endslash.test( req.url ) ) { status = del ? this.codes.CONFLICT : this.codes.SERVER_ERROR; this.respond( req, res, this.page( status, this.hostname( req ) ), status, {Allow: allow}, false ); } else { allow = allow.explode().remove( "POST" ).join( ", " ); fs.lstat( path, function ( e, stat ) { if ( e ) { self.error( req, res, self.codes.NOT_FOUND ); } else { var etag = "\"" + self.etag( req.parsed.href, stat.size, stat.mtime ) + "\""; if ( !req.headers.hasOwnProperty( "etag" ) || req.headers.etag === etag ) { fs.writeFile( path, body, function ( e ) { if ( e ) { self.error( req, req, self.codes.SERVER_ERROR ); } else { status = put ? self.codes.NO_CONTENT : self.codes.CREATED; self.respond( req, res, self.page( status, self.hostname( req ) ), status, {Allow: allow}, false ); } } ); } else if ( req.headers.etag !== etag ) { self.respond( req, res, self.messages.NO_CONTENT, self.codes.FAILED, {}, false ); } } } ); } return this; };