我正在使用它将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,但没有太大的成功;我显然错过了一些东西,因为我最终得到了“没有方法”的错误。
您认为实现目标的最简单方法是什么?
答案 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));