diff --git a/node_modules/vfs-http-adapter/restful.js b/node_modules/vfs-http-adapter/restful.js index 3bf1646b..ca4c8568 100644 --- a/node_modules/vfs-http-adapter/restful.js +++ b/node_modules/vfs-http-adapter/restful.js @@ -10,7 +10,9 @@ module.exports = function setup(mount, vfs, mountOptions) { if (!mountOptions) mountOptions = {}; var errorHandler = mountOptions.errorHandler || function (req, res, err, code) { - console.error(err.stack || err); + // do not show ENOENT errors in browser console + if (err.code != "ENOENT") + console.error(err.stack || err); if (res.headersSent) { res.end(""); return; @@ -20,12 +22,12 @@ module.exports = function setup(mount, vfs, mountOptions) { else if (typeof err.code == "number" && isValidStatusCode(err.code)) res.statusCode = err.code; else if (err.code === "EBADREQUEST") res.statusCode = 400; else if (err.code === "EACCES") res.statusCode = 403; - else if (err.code === "ENOENT") res.statusCode = 404; + else if (err.code === "ENOENT") res.statusCode = 200; // don't trigger error in browser (rely on Content-Type) else if (err.code === "ENOTREADY") res.statusCode = 503; else if (err.code === "EISDIR") res.statusCode = 503; else res.statusCode = 500; var message = (err.message || err.toString()) + "\n"; - res.setHeader("Content-Type", "text/plain"); + res.setHeader("Content-Type", "text/x-error"); res.setHeader("Content-Length", Buffer.byteLength(message)); res.end(message); }; @@ -40,13 +42,6 @@ module.exports = function setup(mount, vfs, mountOptions) { output.readable = true; var first = true; input.on("data", function (entry) { - if (path) { - entry.href = path + entry.name; - var mime = entry.linkStat ? entry.linkStat.mime : entry.mime; - if (/(directory|folder)$/.test(mime)) { - entry.href += "/"; - } - } if (first) { output.emit("data", "[\n " + JSON.stringify(entry)); first = false; diff --git a/plugins/c9.core/http-xhr.js b/plugins/c9.core/http-xhr.js index 378d68af..5293b99a 100644 --- a/plugins/c9.core/http-xhr.js +++ b/plugins/c9.core/http-xhr.js @@ -119,11 +119,11 @@ define(function(require, module, exports) { } } - if (this.status > 299) { + if (xhr.status > 299 || res.headers["content-type"] == "text/x-error") { var err = new Error(xhr.responseText); err.code = xhr.status; - if (debug) - console.error("HTTP error " + this.status + ": " + xhr.responseText); + if (debug && xhr.status > 299) + console.error("HTTP error " + xhr.status + ": " + xhr.responseText); return done(err, data, res); } diff --git a/plugins/c9.preview/preview.handler.js b/plugins/c9.preview/preview.handler.js index ad09b407..d2e9839e 100644 --- a/plugins/c9.preview/preview.handler.js +++ b/plugins/c9.preview/preview.handler.js @@ -167,7 +167,7 @@ define(function(require, exports, module) { port: parsedUrl.port, headers: req.headers }, function(request) { - if (request.statusCode >= 400) + if (request.statusCode >= 400 || request.headers["content-type"] == "text/x-error") handleError(request); else if (isDir) serveListing(request); diff --git a/plugins/c9.preview/views/listing.html.ejs b/plugins/c9.preview/views/listing.html.ejs index d344db98..6c1c5d3b 100644 --- a/plugins/c9.preview/views/listing.html.ejs +++ b/plugins/c9.preview/views/listing.html.ejs @@ -1,6 +1,7 @@
+