Node.js 让Express服务于默认页面的最简单方法?
我使用它将Node.js/Express设置为一个基本的web服务器—它只提供一组静态页面,而不进行任何其他处理。我希望当浏览器获取没有任何文件名的站点时,它始终提供/default.htmlNode.js 让Express服务于默认页面的最简单方法?,node.js,express,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()); }
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,但没有多大成功;很明显,我遗漏了一些东西,因为我最终出现了一个“hasnotmethod”错误
你认为实现我的目标最简单的方法是什么 你可以这样做。假设它是相对于.js文件的html文件:
app.get('/', function(req, res){
res.sendfile('default.html', { root: __dirname + "/relative_path_of_file" } );
});
我简要地查找了为公用文件夹提供服务和指定要提供服务的默认页面的最佳实践。查看“Express中间件”文档后,我的解决方案如下所示:
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”的文件中: 然后,我在我的“configure.js”文件中调用此文件,该文件在我的“server.js”文件中是必需的: 我还没有看到如何最好地处理路由,但这段代码似乎适合我
希望得到一些反馈 奇怪的是没有人提到重定向
app.get('/', function(req, res){
res.redirect('/default.html');
});
当然,这是假设您的“default.html”位于公共路径。
您可以使用以下命令设置公共路径:
app.use(express.static(relative_path_to_project_root));
您是在服务器的根目录(“/”)上发出请求时发送default.html,还是每次找不到要提供服务的静态文件时发送?前者也可以,但后者也可以。非常好,谢谢。我把这个放在app.listen之前(当然是在编辑了\u文件的/relative\u path\u之后),它正是我想要的。我仍然不知道为什么我的其他尝试都失败了,但这是一个很好的解决方案;dr
app.use('/',express.static('app',{index:'coming soon.html}))代码>
app.get('/', function(req, res){
res.redirect('/default.html');
});
app.use(express.static(relative_path_to_project_root));