路由到静态HTML页面,以及Express中的模板化动态路由

时间:2014-08-07 22:04:52

标签: javascript node.js express static

我使用Express创建了一个基本的网络应用程序,并提供了一个动态路线,例如:

app.get('/myroute/:user_id', function (req, res) {
    res.render('mytemplate');
});

这将呈现EJS模板" mytemplate.ejs"当用户访问/myroute/15

现在,我还想创建第二条路线/staticroute,传输静态HTML页面somepage.html

最好的方法是什么?这些静态页面应该在Express之外提供吗?我在StackOverflow上看到了一些相关的答案,但他们要么使用已弃用的功能,要么不支持缓存。

2 个答案:

答案 0 :(得分:2)

这种情况有res.sendfile()。虽然如果您不需要静态文件的特殊路由,您可能会考虑使用express.static中间件。

答案 1 :(得分:1)

这是一个快速的解决方案,您可以尝试使用memcached(太长时间无法发表评论,我仍然建议使用nginx的proxy_cache以避免在下面进行编码):

var Memcached = require('memcached'); // sudo apt-get install memcached
                                      // npm install memcached
var memcached = new Memcached('localhost:11211'); // default
var ttl = 86400; // 24hrs time to live

function readContent(callback) { // async read with callback
    fs.readFile("./someIndex.html", function (err, content) {
        (err) ? callback(err) : callback(null, content);
    })
}

app.get('/someRoutes', function (req, res) {

  memcached.get('foo', function( err, content){ // get 'foo' from memcached
    if( err ) console.error( err ); // .get() error handling

    if( content ) { // data in memcached
      // render content and output
    } else { // data not in memcached

      readContent(function (err, myFile) { // try reading file
        if (myFile) { // file found, save to memcached & render
           memcached.set('foo', myFile, ttl, function( err, data ){
             if( err ) console.error( err ); // .set() error handling
           });
           // render myFile and output
        }
      }); // end readContent()

    } // end if-content-else-
  }); // end memcached.get()
}); // end app.get