让Express服务于默认页面的最简单方法是什么?

时间:2014-01-14 16:57:39

标签: node.js express

我正在使用它将Node.js / Express设置为基本的Web服务器 - 它只提供一组静态页面而无需任何其他处理。当浏览器提取没有任何文件名的网站时,我希望它始终提供/default.html。

var express = require("express");
var app = express();
var port = process.env.PORT || 5000;

app.configure(function(){
  app.use(express.bodyParser());
});

app.use(express.logger());

app.use(express.static(__dirname ));

app.listen(port, function() {
  console.log("Listening on " + port);
});

我尝试过使用res.sendfile和res.redirect,但没有太大的成功;我显然错过了一些东西,因为我最终得到了“没有方法”的错误。

您认为实现目标的最简单方法是什么?

4 个答案:

答案 0 :(得分:23)

我简要介绍了提供公用文件夹并指定要提供的默认页面的最佳做法。在审核了“Express”中间件之后#39;文档,我的解决方案如下所示,

var express = require('express');
var app = express();

var options = {
  index: "coming-soon.html"
};

app.use('/', express.static('app', options));

var server = app.listen(8081, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('my app is listening at http://%s:%s', host, port);
});

答案 1 :(得分:17)

你可以这样做。假设它是一个相对于.js文件的html文件:

app.get('/', function(req, res){
    res.sendfile('default.html', { root: __dirname + "/relative_path_of_file" } );
});

答案 2 :(得分:1)

我已经添加了一些额外的"肉类"在它上面演示如何甚至包括路由。我将以下所有代码放在名为" routes.js":

的文件中
var express = require('express'),
    painting = require('./controllers').Painting,
    gallery = require('./controllers').Gallery;

module.exports.initialize = function(appSvr, router) {
    router.get('/paintings', painting.list);
    router.get('/galleries', gallery.list);

    appSvr.use('/', router);
    appSvr.use('/', express.static(__dirname + '/../public', { index: 'index.html' }));
};

然后我在我的" configure.js"中调用此文件。我的" server.js"中需要的文件文件:

var routes = require('./routes'),
    express = require('express'),
    bodyParser = require('body-parser');

module.exports = function(appSvr) {
    appSvr.use(bodyParser.urlencoded());
    appSvr.use(bodyParser.json());
    routes.initialize(appSvr, new express.Router());

    return appSvr;
};

我还没有看到如何最好地处理路由,但这段代码似乎对我有用。

会喜欢一些反馈!

答案 3 :(得分:0)

很奇怪,没有人提到重定向。

app.get('/', function(req, res){
    res.redirect('/default.html');
});

当然,这假定您在公共路径上拥有“ default.html”。 您可以使用以下方法设置公共路径:

app.use(express.static(relative_path_to_project_root));