Kaynağa Gözat

Improved transforms

Transforms are now only cached until the source file changes,
and the extension argument now expects a period (i.e ".html")
to be consistent with the path.extname function.
master
mortie 6 yıl önce
ebeveyn
işleme
827f3708eb
4 değiştirilmiş dosya ile 25 ekleme ve 14 silme
  1. 3
    2
      README.md
  2. 2
    0
      example.js
  3. 19
    11
      js/static.js
  4. 1
    1
      package.json

+ 3
- 2
README.md Dosyayı Görüntüle

@@ -140,7 +140,7 @@ Example (assumes you have the node-sass module installed):
```
var sass = require("node-sass");

app.transform("sass", "text/css", (path, writeStream) => {
app.transform(".sass", "text/css", (path, writeStream) => {
try {
var str = fs.readFileSync(path, "utf8");
} catch (err) {
@@ -160,4 +160,5 @@ app.transform("sass", "text/css", (path, writeStream) => {
Now, any .sass file served with `webframe.static` will be compiled into CSS,
and sent with the browser with the MIME type "text/css". The result is also
cached, so the expensive sass compilation will only happen the first time the
file is requested. The result will not be cached if you call writeStream.error.
file is requested, or when the file changes. The result will not be cached
if you call writeStream.error.

+ 2
- 0
example.js Dosyayı Görüntüle

@@ -6,11 +6,13 @@ var app = new webframe.App();

// Endpoint which uses the "params" middleware to parse URL parameters
app.get("/params-example", [ mw.params ], (req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello, "+req.params.name);
});

// Endpoint which uses the "payload" middleware to get the payload as a string
app.post("/payload-example", [ mw.payload ], (req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end(req.payload);
});


+ 19
- 11
js/static.js Dosyayı Görüntüle

@@ -63,8 +63,8 @@ function sendfile(path, app, pathname, req, res) {
}

var transformCache = {};
function handleTransform(path, req, res, app) {
var ext = pathlib.extname(req.url).substring(1);
function handleTransform(stat, path, req, res, app) {
var ext = pathlib.extname(path).substring(1);
if (ext === "")
return false;

@@ -74,9 +74,14 @@ function handleTransform(path, req, res, app) {

if (transformCache[path]) {
var c = transformCache[path];
res.writeHead(c.status, c.headers);
res.end(c.content);
return true;
if (stat.ctime === c.ctime) {
res.writeHead(c.data.status, c.data.headers);
res.end(c.data.content);
return true;
} else {
console.log("throwing out because ctime.");
delete transformCache[path];
}
}

var data = { content: "", headers: null, status: null };
@@ -107,7 +112,10 @@ function handleTransform(path, req, res, app) {
if (!nocache) {
data.status = writeStream.status;
data.headers = writeStream.headers;
transformCache[path] = data;
transformCache[path] = {
data: data,
ctime: stat.ctime
};
}
},

@@ -132,10 +140,6 @@ module.exports = function(root, before) {
// Join the web root with the request's path name
var path = pathlib.join(root, pn.replace(before, ""));

// If there's a transform, let that handle it
if (handleTransform(path, req, res, app))
return;

// Send a file
function send(path) {
sendfile(path, app, pn, req, res);
@@ -172,7 +176,11 @@ module.exports = function(root, before) {
path = pathlib.join(path, "index.html");
}

// Send the file
// If there's a transform, let that handle it
if (handleTransform(stat, path, req, res, app))
return;

// Otherwise, send the file
send(path);
});
}

+ 1
- 1
package.json Dosyayı Görüntüle

@@ -1,6 +1,6 @@
{
"name": "webframe",
"version": "0.7.0",
"version": "0.8.0",
"description": "Web framework.",
"main": "index.js",
"scripts": {

Loading…
İptal
Kaydet