让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,但没有太多成功; 我明显错过了一些东西,因为我最终得到了“没有方法”的错误。

你会怎么说是实现我的目标的最简单的方法?

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

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

我简要地查看了提供公用文件夹并指定要提供的默认页面的最佳实践。 在查看“Express中间件”文档后,我的解决scheme如下所示,

 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); }); 

我已经添加了一些额外的“肉”,以演示如何甚至可以包括路由。 我把所有下面的代码放在一个名为“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' })); }; 

然后我在我的“server.js”文件中需要的“configure.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; }; 

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

会喜欢一些反馈!