I would probably write something like this

var baseUrl = config.CDN.baseUrl;

CDN.use(baseUrl, checkFileSanity, getRealPath, serveFile);
function checkFileSanity (req, res, next) {
  var filepath = path.join(config.base, '/cdn', req.url);
  fs.lstat(filepath, function (err, stat) {
    if(err) return next(err);
    stat.path = filepath;
    req.fileStats = stat;
    next();
  });}
function getRealPath(req, res, next) {
  if(req.fileStats.isSymbolicLink()) {
    fs.readlink(req.fileStats.path, function (err, realpath) {
      if(err) return next(err);
      req.realpath = realpath;
      next();
    });
  }
  else {
    res.status(404).end();
  }}
function serveFile (req, res, next) {
  fs.createReadStream(req.realpath).pipe(res);}


On Monday, 15 September 2014 18:28:28 UTC+2, Ingwie Phoenix wrote:
>
> Hai, everyone. 
>
> So I just figured out that Connect’s static file servers dont work well 
> with symlinks…so I had tow rite myself a little workaround, a fallback 
> router, per-se. But whilst I did so, I had a nice meeting with the callback 
> hell. Here’s my code: 
>
>             CDN.use(config.CDN.baseUrl, function(req, res, next){ 
>                 if(err) { next(); throw err; } 
>                 fs.lstat(config.base+"/cdn"+req.url, function(err,stats){ 
>                     if(stats.isSymbolicLink()) { 
>                         fs.readlink(config.base+"/cdn"+req.url, 
> function(err, linkstr){ 
>                             if(err) throw err; 
>                             log.info("Redirecting request \""+req.url+"\" 
> to \""+linkstr); 
>                             fs.readFile(linkstr, function(err, data){ 
>                                 if(err) throw err; 
>                                 
> res.writeHead(200,{"Content-type":"text/html"}); 
>                                 res.end(data); 
>                             }); 
>                         }); 
>                     } 
>                 }); 
>             }); 
>         }); 
>
> Okay…thats lots. And how does one get around this and into a bit of nicer 
> code? It almost looks like a little pyramid there… 
>
> Kind regards, Ingwie.

-- 
Job board: http://jobs.nodejs.org/
New group rules: 
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nodejs/7b311be6-b304-46d6-9254-6aaeb735a112%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to