56 строки
1.3 KiB
JavaScript
56 строки
1.3 KiB
JavaScript
var fs = require("fs");
|
|
|
|
module.exports = function XMLHttpRequest() {
|
|
var self = this,
|
|
info = self._info = {},
|
|
headers = {},
|
|
url;
|
|
|
|
// TODO handle file system errors?
|
|
|
|
self.open = function(m, u, a) {
|
|
info.url = u;
|
|
info.async = a;
|
|
self.send = a ? read : readSync;
|
|
};
|
|
|
|
self.setRequestHeader = function(n, v) {
|
|
if (/^Accept$/i.test(n)) info.mimeType = v.split(/,/g)[0];
|
|
};
|
|
|
|
function read() {
|
|
fs.readFile(info.url, "binary", function(e, d) {
|
|
if (e) {
|
|
self.status = 404; // assumed
|
|
} else {
|
|
self.status = 200;
|
|
self.responseText = d;
|
|
self.responseXML = {_xml: d};
|
|
headers["Content-Length"] = d.length;
|
|
}
|
|
self.readyState = 4;
|
|
XMLHttpRequest._last = self;
|
|
if (self.onreadystatechange) self.onreadystatechange();
|
|
});
|
|
}
|
|
|
|
function readSync() {
|
|
try {
|
|
var d = fs.readFileSync(info.url, "binary");
|
|
self.status = 200;
|
|
self.responseText = d;
|
|
self.responseXML = {_xml: d};
|
|
headers["Content-Length"] = d.length;
|
|
} catch (e) {
|
|
self.status = 404; // assumed
|
|
}
|
|
self.readyState = 4;
|
|
XMLHttpRequest._last = self;
|
|
if (self.onreadystatechange) self.onreadystatechange();
|
|
}
|
|
|
|
self.getResponseHeader = function(n) {
|
|
return headers[n];
|
|
};
|
|
};
|